分享
分销 收藏 举报 申诉 / 251
播放页_导航下方通栏广告

类型100例单片机程序设计范例汇总(完全).pdf

  • 上传人:曲****
  • 文档编号:5459584
  • 上传时间:2024-11-07
  • 格式:PDF
  • 页数:251
  • 大小:3.84MB
  • 下载积分:17 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    100 单片机 程序设计 范例 汇总 完全
    资源描述:
    100例程序设计范例汇总第一章.4【实例1】使用累加器进行简单加法运算:.4【实例2】使用B寄存器进行简单乘法运算:.4【实例3】通过设置RSI,RS0选择工作寄存器区1:.4【实例4】使用数据指针DPTR访问外部数据数据存储器:.4【实例5】使用程序计数器PC查表:.4【实例6】IF语句实例:.4实例7 SWITCH-CASE语句实例:.4【实例8】FOR语句实例:.4实例9 WHILE语句实例:.5【实例10 DO.WHILE语句实例:.5【实例11】语句形式调用实例:.5实例12 表达式形式调用实例:.5【实例13】以函数的参数形式调用实例:.5【实例14】函数的声明实例:.5【实例15】函数递归调用的简单实例:.5【实例16】数组的实例:.6【实例17】指针的实例:.6【实例18】数组与指针实例:.6实例19 P1 口控制直流电动机实例.6第二章.8【实例20】用74LS165实现串口扩展并行输入口.8【实例21】用74LS164实现串口扩展并行输出口.10实例22 P0 I/O扩展并行输入口.12实例23 P0 I/O扩展并行输出口.12实例24 用8243扩展I/O端口.12实例25 用8255A扩展I/O 口.14实例26 用8155扩展I/O 口.19第三章.26实例29 与AT24系列EEPROM接口及驱动程序.26实例30 EEPROM(X5045)接口及驱动程序.30【实例31】与铁电存储器接口及驱动程序.33实例32 与双口 RAM存储器接口及应用实例.35【实例33】与NANDFLASH(K9F5608)接口及驱动程序.35第四章.43实例34 独立键盘控制.43【实例35】矩阵式键盘控制.44【实例36】改进型I/O端口键盘.46【实例37】PS/2键盘的控制.49【实例38】LED显示.53【实例39】段数码管(HD7929 显示实例.54【实例40】16x2字符型液晶显示实例.55【实例411点阵型液晶显示实例.61【实例42】LCD显示图片实例.63第五章.70【实例43】简易电子琴的设计.70【实例44】基于MCS-51单片机的四路抢答器.71【实例45】电子调光灯的制作.76【实例46】数码管时钟的制作.81实例47 LCD时钟的制作.96【实例48】数字化语音存储与回放.103【实例49】电子标签设计.112第六章.120实例50 指纹识别模块.121【实例51】数字温度传感器.121第七章.124实例53 超声波测距.124实例54 数字气压计.125实例55 基于单片机的电压表设计.132实例56 基于单片机的称重显示仪表设计.133【实例57】基于单片机的车轮测速系统.136第八章.138【实例58】电源切换控制.138实例59 步进电机控制.140实例60 单片机控制自动门系统.141【实例61】控制微型打印机.144实例62 单片机控制的EPSON微型打印头.144【实例63】简易智能电动车.145实例64 洗衣机控制器.149第九章.152【实例65】串行A/D转换.152【实例66】并行A/D转换.153实例67 模拟比较器实现A/D转换.154【实例68】串行D/A转换.155【实例69】并行电压型D/A转换.156【实例70】并行电流型D/A转换.156【实例71】12c接口的A/D转换.157【实例72】12c接口的D/A转换.161第十章.164实例73 单片机间双机通信.164实例74 单片机间多机通信方法之一.166实例75 单片机间多机通信方法之二.171【实例76】PC与单片机通信.176实例77 红外通信接口.178第 H-一章.180实例79 单片机实现PWM信号输出.180实例80 实现基于单片机的低频信号发生器.182【实例81 软件滤波方法.183实例82 FSK信号解码接收.186实例83 单片机浮点数运算实现.187实例84 神经网络在单片机中的实现.192【实例85】信号数据的FFT变换.194第十二章.198【实例86】I2C 总线接口的软件实现.198实例87 SPI总线接口的软件实现.200【实例88】1-WIRE总线接口的软件实现.205实例89 单片机外挂CAN总线接口.207实例90 单片机外挂USB总线接口.210【实例91】单片机实现以太网接口.214实例92 单片机控制GPRS传输.221实例93 单片机实现TCP/IP协议.223第十三章.229实例94 读写U盘.229实例95 非接触IC卡读写.234【实例96】SD卡读写.238【实例97】高精度实时时钟芯片的应用.242第十四章.247实例98 智能手机充电器设计.247实例99 单片机控制门禁系统.248第一章【实例1】使用累加器进行简单加法运算:MOVA,#02H;A-2ADDA,#06H;A-A+06H【实例2 使用B寄存器进行简单乘法运算:MOVA,#02H;A-2MOVB,#06H;B-6MULAB;BA-A*B=6*2【实例3】通过设置RSI,RSO选择工作寄存器区1:CLRPSW.4;PSW.4-0SETBPSW.5;PSW.5-1【实例4 使用数据指针DPTR访问外部数据数据存储器:MOVDPTR,#datal6;DPTR-data 16MOVXA,DPTR;A-(DPTR)MOVX DPTR,A;(DPTR)-A【实例5】使用程序计数器PC查表:MOVA,#data;A-dataMOVCA,A+DPTR;PC-g+l,A-(A)+(PC)【实例6】if语句实例:void mainQ int a,b,c,min;printsn please input three number:);scanf(n%d%d%d n,&a,&b,&c);if(ab&ac)printf(nmin=%dnn,a);else if(ba&bc)printf(nmin=%dnn,b);else if(ca&c0;a)printf(n%dn,a);)实例9 while语句实例:void main()int i=0;while(i=10)i+;【实例10】dowhile语句实例:void main()int i=0;do i+;while(i=10);)【实例11】语句形式调用实例:void main()int i=0;while(i=10)i+;.Sum();/*函数调用*/)实例12 表达式形式调用实例:void mainQ int a,b,i=0;while(i=10)i+;.i=4*Sum(a,b);/*函数调用*/)【实例13】以函数的参数形式调用实例:void mainQ int a,b,c,i=0;while(i=10)i+;.i=max(c,Sum(a,b);/*函数调用*/实例14 函数的声明实例:void mainQ int max(int x,int y);/*函数的声明*/int a,b,c,i=0;while(i=10)i+;.i=max(c,Sum(a,b);/*函数调用*/【实例15】函数递归调用的简单实例:void fun()int a=l,result,i;fbr(i=0;i10;)i=a+I;result=fun();/*函数调用*/return result;)【实例16】数组的实例:void mainQ charnum3 3=#,;/*定义多维数组*/int i=0,j=0;fdr(;i3;i+)for(;j3;j+)printf(c”,numiJD;printf(/n”);)【实例17】指针的实例:void mainQ int a=3,*p;p=&a;/*将变量a的地址赋值给指针变量p*/printf(d,%d”,a,*p);/*输出二者的数值进行对比*/【实例18】数组与指针实例:void mainQ int i=3,num3=l,2,3,*p;p=num;/*将数组num口的地址赋值给指针变量p*/result=max(p,3);/*函数调用,计算数组的最大值*/)实例19 P1 口控制直流电动机实例sfrp 1=0 x90;sbitplO=plAO;sbitpll=p1A1;void main()(int i,m;int j=100;int k=20;/正快转for(i=0;i100;i+)(P10=l;for(j=0;j50;j+)(m=0;)Pl 0=0;for(j=0;j10;j+)m=0)正慢转fbr(i=0;i100;i+)(P10=l;for(j=0;j10;j+)(m=0)pl 0=0;for(j=0;j50;j+)(m=0/负快转fbr(i=0;i100;i+)(pll=l;for fl=0;j50;j+)(m=0;)pn=o;for(j=0;j10;j+)(m=0;/负慢转for(i=0;i100;i+)(pll=l;for(j=0;j10;j+)(m=0;)pll=0for(j=0;j50;j+)m=0;)第二章实例20 用74LS165实现串口扩展并行输入口(1)函数声明管脚定义/-库函数声明,管脚定义-#includesbit LOAD=P1A7;用P1A7控制SH/管脚(2)串口初始化函数UART_init()/-/函数名称:UART_init()/功能说明:串口初始化,设定串口工作在方式0/-void UARTinit(void)(SCON=OxlO;设串行口方式0,允许接收,启动接收过程ES=0;禁止串口中断)(3)数据接收函数PA()-/函数名称:PA()/输入参数:无/输出参数:返回由并口输入的数据/功能说明:接收八位串行数据/-unsigned char PA(void)unsigned char PA data;LOAD=0;当Pl.7输出低电平,74LS165将并行数据装入寄存器/当中LOAD=1;当P1.7输出高电平,74LS165在时钟信号下进行移位UART_init();/74LS165工作在时钟控制下的串行移位状态while(RI=0);循环等待RI=0;PA_data=SBUF;return PA data;/返回并行输入的数据)(1)函数声明管脚定义/-库函数声明,管脚定义-#includesbit a7=ACCA7;sbit simuseri_CLK=P 1A6;用P1A6模拟串口时钟sbit simuseri DATA=P 1A5;用P1A5模拟串口数据sbit drive74165_LD=P 1A7;用P1A7控制SH/管脚(2)数据输入函数in_simuseri()/-/函数名称:in_simuseri()/输入参数:无/输出参数:data_buf/功能说明:8位同位移位寄存器,将simuseri_DATA串行输入的数据按从低位到/高位/保存到data buf/-unsigned char in simuseri(void)(unsigned char i;unsigned char data buf;i=8;do(ACC=ACC1;fbr(;simuseri_CLK=O;);a7=simuseriDATA;fbr(;simuseri_CLK=l;);)while(-i!=0);simuseri_CLK=O;data_buf=ACC;retum(databuf);)(3)数据输出函数PAs()/-/函数名称:PAs()/输入参数:无/输出参数:PAs_buf,返回并行输入74LS165的数据/功能说明:直接调用,即可读取并行输入74LS165的数据,不需要考虑74LS165的/工作原理/-unsigned char PAs(void)(unsigned char PAs buf;drive74165_LD=0;drive74165_LD=1;PAs_buf=in_simuseri();retum(PAsbuf);)实例21 用74LS164实现串口扩展并行输出口单片机串口驱动74LS164的程序主要包括函数声明管脚定义部分、串口初始化函数以 及数据发送函数。(1)函数声明管脚定义/-库函数声明,管脚定义-#include sbit CLR=P1A7;用P1A7控制CLRJ2)串口初始化函数UART_init()/-/函数名称:UART_init()/功能说明:串口初始化,设定串口工作在方式0/-void UARTinit(void)(SCON=0 x00;没串行口方式0,允许发送,启动发送过程ES=0;/禁止串口中断)(3)数据发送函数PA_out()/-/函数名称:PA_out()/输入参数:PA_data,需要从74LS164并行口输出的数据/输出参数:无/功能说明:发送八位串行数据至并口/-void PA_out(unsigned char PAdata)(CLR=0;/并口输出清零CLR=1;开始串行移位 UART_init();/74LS165工作在时钟控制下的串行移位状态 while(TI=O);循环等待TI=0;SBUF=PA_data;)单片机I/O端口驱动74LS164主要包括函数声明管脚定义部分、数据输入函数以及数据 输出函数。(1)函数声明管脚定义/-库函数声明,管脚定义-/include sbit simuseri_CLK=P 1A6;用P1A6模拟串口时钟 sbit simuseri_DATA=P 1A5;用PU5模拟串口数据 sbit drive74164_CLR=PlA7;用P1A7控制CLR sbit aO=ACCAO;(2)数据输入函数out_simuseri()/-/函数名称:out simuseri/输入参数:data buf/输出参数:无/功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA _一一_-void out_simuseri(char databuf)(char i;i=8;ACC=data_buf;do(simuseri_CLK=O;simuseri_DATA=aO;simuseri_CLK=1;ACC=ACC1;)while(-i!=0);simuseri_CLK=O;(3)数据输出函数PA_out()/-/函数名称:PA out/输入参数:Pseri_out,需要输出的8位数据/输出参数:无/功能说明:将Pseri_out中的数据送到74165并行口 A-G输出/-void PA out(char Pseri out)(drive74164_CLR=0;/井口输出清零drive74164 CLR=1;/开始串行移位outsimuseri(Pseriout);)【实例22】P0 I/O扩展并行输入口I/O 口对应的地址为:1111 1110 1111 1111 B=FEFFHCPU操作指令为:/define 244_addr xbyte0XFEFFunsigned char I/O DATA;I/O_DATA=244_addr;【实例23】P0 I/O扩展并行输出口I/O端口对应的地址为:1111 1101 1111 1111 B=FDFFHCPU操作指令为:#define 273_addr xbyte0XFDFFunsigned char I/O DATA;244_addr=I/O_DATA;【实例24】用8243扩展I/O端口#includesbit ContrBit0=PlA0;sbit ContrBitl=PlAl;sbit ContrBit2=PlA2;sbit ContrBit3=PlA3;sbit PROG=P1A4;sbit CS=P1A5;char driver8243(char sele_P,char sele_M,char out data)(char in_data=0;char databuf;PROG=1;置PROG为高电平II-开始写控制字if(sele_P&0 x01)=0)将控制字最低位送到8243的p2.0ContrBit0=0;elseContrBitO=l;if(sele_P&0 x02)=0)将控制字第二位送到8243的p2.1ContrBitl=0;elseContrBitl=l;/以上两位共同指定端口地址/-一写端口工作模式控制字-if(sele_M&0 x01)=0)将端口工作模式控制字低位送到8243的p2.2ContrBit2=0;elseContrBit2=l;if(sele_M&0 x01)=0)/将端口工作模式控制字高位送到8243的p2.3ContrBit3=0;elseContrBit3=l;/完成写控制字PROG=0;在PROG上产生下降沿switch(sele_M&0 x03)(/判断工作模式case 0:break;/sele_M=B00为输入,不处理,等待上升沿case 1:data_buf=out_data;break;sele_M=B01为输出,直接送数据case 2:data_buf=out_data;break;sele_M=B10为逻辑或,直接送数据case 3:data_buf=out_data;break;sele_M=BH为逻辑与,直接送数据PROG=1;/产生上升沿if(sele_M&0 x03)=0)/sele_M=B00 为输入,接收数据in_data=(data_buf&0 x0F);retum(indata);/sele M=B00,返回接收到的数据/sele_M!=B00,返回 0void main(void)(char receive data;receive_data=driver8243(l,0,5);)实例25用8255A扩展I/O 口/-/函数名称:rd_PA/输入函数:无/输出参数:PA_data,PA输入的数据/功能说明:驱动PA实现输入功能,读入PA的并行数据,/-.-unsigned char rd PA(void)读 PA(1)管脚定义及函数声明/-函数声明,管脚定义-#include#include/define a8255_PA XBYTE0 x7F7C/PA 地址#define a8255_PB XBYTE0 x7F7D/PB 地址/define a8255_PC XBYTE0 x7F7E/PC 地址/define a8255_CON XBYTE0 x7F7F 控制字地址unsigned char bdata lO flags;用于表示PA、PB、PC的当前输入输出状态/内容不能被其他程序改写sbit IO _flagsA=IO_flagsA0;/PA的当前输入输出状态sbit IO _flagsB=IO_flagsA 1;/PB的当前输入输出状态sbit IO _flagsC=I0_flagsA2;/PC的当前输入输出状态unsigned char const cfg_table8-(0 x80,/10000000b,c=outb=outa=out0 x90,/10010000b,c=outb=outa=in0 x82,/10000010b,c=outb=ina=out0 x92,/10010010b,c=outb=ina=in0 x89,/10001001b,c=inb=outa=out0 x99,/10011001b,c=inb=outa=in0 x8B,/10001011b,c=inb=ina=out0 x9B,)unsigned char rd PA(void);/10011011b,c=inb=ina=in读PAunsigned char rd PB(void);读PBunsigned char rd PC(void);读PCvoid wr_PA(unsigned char PA data);写PAvoid wr_PB(unsigned char PBdata);写PBvoid wr_PC(unsigned char PCdata);写PCvoid set_PC(unsigned char PC num);/PC位操作,置位,PC_num为端口号07 void clr_PC(unsigned char PCnum);/PC位操作,复位,PC_mim为端口号07 void PAB C_config(void);写8255A控制字(2)端口 A、B、(:读写函数(unsigned char PA data;ACC=IO_flags;/把状态标志字读到ACC便于进行位操作 do(IO_flagsA=l;置PA状态标志位为高-输入IO_flags=ACC;PABCconfigQ;/调用配置子程序,完成对8255的设置 ACC=IO flags;)while(IO flagsA=0);判断状态标志位是否为高控制字设置完成PA_data=a8255_PA;把PA的数据读到PA_data retum(PAdata);返回 PA_data)/-一一-/函数名称:rd_PB/输入函数:无/输出参数:PB_data,PB输入的数据/功能说明:驱动PB实现输入功能,读入PB的并行数据/-一一-unsigned char rd PB(void)读 PB(unsigned char PB data;ACC=IO_flags;/把状态标志字读到ACC便于进行位操作 do(IO_flagsB=l;置PB状态标志位为高-输入IO_flags=ACC;PABC_config();/调用配置子程序,完成对8255的设置)while(IO flagsB=0);判断状态标志位是否为高控制字设置完成PB_data=a8255 PB;把PB的数据读到PB dataretum(PBdata);/返回 PB data)/-/函数名称:rd_PC/输入函数:无/输出参数:PC_data,PC输入的数据/功能说明:驱动PC实现输入功能,读入PC的并行数据/-一一-unsigned char rd PC(void)读 PC(unsigned char PC data;ACC=IO_flags;/把状态标志字读到ACC便于进行位操作 do(10 flagsC=l;置PC状态标志位为高-输入IO_flags=ACC;PABCconfigQ;/调用配置子程序,完成对8255的设置/ACC=IO_flags;)while(IO_flagsC=0);判断状态标志位是否为高控制字设置完成PC_data=a8255_PC;把PC的数据读到PC_data retum(PCdata);/返回 PC_data)-/函数名称:wr_PA/输入函数:PA_data,送PA输出的数据/输出参数:无/功能说明:驱动PA实现输出功能,输出数据到PA/-void wr_PA(unsigned char PA data)写 PA(ACC=IO_flags;把状态标志字读到ACC便于进行位操作(IO _flagsA=0;置PA状态标志位为低-输出 IO_flags=ACC;/位操作完成,把ACC的内容写回状态标志字 PABCconfigQ;/调用配置子程序,完成对8255的设置 ACC=IO_flags;)while(I0 _flagsA=1);/判断状态标志位是否为高,/为高,设置未完成,需从新设置a825 5_PA=PA_data;将PA data的内容送到PA)/-一一-/函数名称:wr_PB/输入函数:PB_data,送PB输出的数据/输出参数:无/功能说明:驱动PB实现输出功能,输出数据到PA/-void wr_PB(unsigned char PB data)写 PB(ACC=IO flags;把状态标志字读到ACC便于进行位操作IO_flagsB=0;置PB状态标志位为低-输出IO_flags=ACC;/位操作完成,把ACC的内容写回状态标志字 PABCconfigQ;调用配置子程序,完成对8255的设置ACC=IO flags;)while(IO_flagsB=1);判断状态标志位是否为高,为高,设置未完成,需从新设置a8255_PB=PB_data;将PB data的内容送到PB)/-/函数名称:wr_PC/输入函数:PC_data,送PC输出的数据/输出参数:无/功能说明:驱动PC实现输出功能,输出数据到PC/-void wr_PC(unsigned char PC data)写 PC(ACC=IO_flags;/把状态标志字读到ACC便于进行位操作(IO flagsC=0;置PC状态标志位为低-输出IO_flags=ACC;/位操作完成,把ACC的内容写回状态标志字 PABCconfigO;/调用配置子程序,完成对8255的设置 ACC=IO flags;)while(I0 _flagsC=1);判断状态标志位是否为高,/为高,设置未完成,需从新设置a8255_PC=PC_data;将PC_data的内容送到PC)(3)端口 C配置函数/-/函数名称:set_PC/输入函数:PC_num,范围07/输出参数:无/功能说明:对PC进行位操作,置PC(PC_num)为高/-void set_PC(unsigned char PC num)(ACC=IO_flags;IO _flagsC=0;ACC=IO_flags;PC_num=PC_num 1;PC_num=(PC_num|0 x01);a8255_CON=PC_num;)/-/函数名称:clr PC./输入函数:PC_num,范围07/输出参数:无/功能说明:对PC进行位操作,清PC(PC_num)为低/-void clr_PC(unsigned char PCnum)(ACC=IO_flags;IO _flagsC=l;ACC=IO_flags;PC_num=PC_num 1;PC_num=(PC_num&OxFE);a8255 coN=PC_num;)(4)写控制字函数,/-.-/函数名称:PAB C config/功能说明:写8255A的控制字寄存器/-void PAB C_config(void)(a8255_CON=cfg_tableIO_flags;)【实例26】用8155扩展I/O 口(1)相关函数声明及管脚定义/-函数声明,#include#include#define a8155_PA XBYTE0 x7E00/define a8155_PB XBYTE0 x7E01#define a8155_PC XBYTE0 x7E02管脚定义-*/控制字地址/PA地址/PB地址/define a8155_CON XBYTE0 x7E03/define TimerA XBYTE0 x7E04#define TimerB XBYTE0 x7E05#define mem head XBYTE0 x7F00 unsigned char bdata lO flags;/PC地址/定时器寄存器A/定时器寄存器B/存储器首地址用于表示PA、PB、PC的当前输入输出状态/内容不能被其他程序改写sbit IO_flagA=IO flagsA0;/PA的当前输入输出状态 sbit 10 _flagB=IO_flagsAl;/PB的当前输入输出状态 sbit IO_flagC=IO flagsA2;/PC的当前输入输出状态 sbit 10 flagC 1=10 flagsA3;/PC的当前输入输出状态 sbit Int_flagA=state_flags A4;/PA的当前输入输出状态sbit Int_flagB=state _flagsA5;/PB的当前输入输出状态sbit Timer flag l=state_flagsA6;sbit Timer_flag2=state_flags A7;/Timer的状态置位表示计数中unsigned char rd_mem(unsigned char mem ad);读存储器void wr_mem(unsigned char mem ad,unsigned char mem data);写存储器char rdPA(void);读PAchar rdPB(void);读PBchar rdPC(void);读PCvoid wr_PA(unsigned char PAdata);写PAvoid wr_PB(unsigned char PBdata);写PBvoid wr_PC(unsigned char PCdata);写PCvoid DintPA(void);/关端口 A中断void EintPA(void);/开端口 A中断void DintPB(void);关端口 B中断void EintPB(void);/开端口 B中断void setting PCOint(void);void setting_PC4int(void);void start timer(void);开始计数器计数void stop timer(void);停止计数器计数void setting zero stop(void);设定计数到零停止计数int rdtimer(void);读计数值void setting_timerout_mode(unsigned char mode);/设定输出模式(2)读写外RAM函数读写外RAM函数对外部存储器指定单元数据进行读写,程序代码如下:/-/函数名称:rd mem/输入函数:mem ad,范围0-255/输出参数:mem_data,存储对应数据/功能说明:读外部RAM,输入相对地址,返回数据/-unsigned char rd_mem(unsigned char mem ad)读存储器(unsigned char mem data;unsigned int ADmem;AD_mem=&mem_head;AD_mem=AD_mem+mem_ad;mem_data=XB YTE ADmem;retum(memdata);)/-II函数名称:wr mem/输入函数:mem ad,mem data相对地址和数据/输出参数:无/功能说明:写数据到外部RAM,把数据写到相应的地址/-void wr_mem(unsigned char mem ad,unsigned char mem data)写存储器(unsigned int AD mem;AD_mem=&mem_head;AD_mem=AD_mem+mem_ad;XBYTEAD_mem=mem_data;)(3)端口 PA、端口 PB以及端口 PC的读写设置函数端口 PA、端口 PB以及端口 PC的读写设置函数主要完成对8155端口的输入输出设置 及数据读写,程序代码如下:一一一-/函数名称:rd_PA/输入函数:无/输出参数:PA_data/功能说明:返回PA数据/-.-char rd PA(void)读 PA(unsigned char PA data;ACC=state flags;/把状态标志字读到ACC便于进行位操作 do(IO _flagA=0;置PA状态标志位为低-输入 state_flags=ACC;a815 5_CON=state_flags;重写控制字,完成对8155的设置)while(IO_flagA=l);判断状态标志位是否为高 控制字设置完成 PA_data=a815 5PA;把PA的数据读到PA data retum(PAdata);返回 PA_data)/-/读PB、PC的函数:rd_PB和rd_PC程序代码与rd_PA类似,不再赘述/-/函数名称:wr_PA/输入函数:PA_data/输出参数:无/功能说明:把PA_data送到PA输出/-void wr_PA(unsigned char PA data)写 PA(ACC=state_flags;把状态标志字读到ACC便于进行位操作IO_flagA=l;置PA状态标志位为高-输出 state_flags=ACC;/位操作完成,把ACC的内容写回状态标志字a8155_C0N=state flags;/写控制字,完成对8155的设置)while(IO_flagA=0);判断状态标志位是否为低/为低,设置未完成,需从新设置a815 5_PA=PA_data;将PA data的内容送到PA)/-.-/写PB、PC的函数:wr_PB和wr_PC程序代码与wr_PA类似,不再赘述/-一-_(4)端口 PA、端口 PB以及端口 PC的中断设置函数端口 PA、端口 PB以及端口 PC的中断设置函数完成各个端口的中断开启和关断,程序 代码如下:/函数名称:Eint_PA/输入函数:无/输出参数:无/功能说明:PA中断允许/-一一-_一一-_void Eint PA(void)开端 口 A 中断(ACC=state flags;/把状态标志字读到ACC便于进行位操作Int_flagA=l;state_flags=ACC;/位操作完成,把ACC的内容写回状态标志字a8155_CON=state flags;/写控制字,完成对8155的设置)/-/函数名称:Dint_PA/输入函数:无/输出参数:无/功能说明:PA中断禁止.void Dint PA(void)关端 口 A 中断(ACC=state_flags;把状态标志字读到ACC便于进行位操作Int_flagA=O;state _flags=ACC;/位操作完成,把ACC的内容写回状态标志字 a8155_CON=state flags;/写控制字,完成对8155的设置)一一一一一-/开关PB中断的函数Eint_PB、Dint_PB和Eint_PA、Dint_PA程序代码类似,不再赘述/-端口 PC上下半口配置函数:端口 PC上下半口配置函数可实现端口 PC上半口配置为PA状态输出和PC下半口配置 为PB状态输出。程序代码如下:/-/函数名称:PCO_PAint/输入函数:无/输出参数:无/功能说明:设置PC上半口为PA状态输出,PCO=INTRa,PCl=BFa,PC3=/STBb/-void PCO_PAint(void)/PC 上半口为 PA 状态输出(PC0=INTRa,PCl=BFa,PC3=ACC=state_flags;/把状态标志字读到ACC便于进行位操作 Int_flagA=l;IO_flagCl=l;state_flags=ACC;/位操作完成,把ACC的内容写回状态标志字 a8155_CON=state flags;/写控制字,完成对8155的设置)/-/函数名称:PC4_PBint/输入函数:无/输出参数:无/功能说明:设置PC下半口为PB状态输出,PC4=INTRb,PC5=BFb,PC6=/-void PC4_PBint(void)/PC 下半口为 PB 状态输出(PC0=INTRa,PCl=BFa,PC3=ACC=state flags;/把状态标志字读到ACC便于进行位操作 Int_flagA=l;IO_flagCl=l;IO_flagC=l;state _flags=ACC;/位操作完成,把ACC的内容写回状态标志字a8155_CON=state flags;/写控制字,完成对8155的设置)计数器设置函数:计数器设置函数完成计数器的起停和读写和输出模式设置,具体程序代码如下:一一一.-/函数名称:start timer/输入函数:无/输出参数:无/功能说明:开始计数器计数/-void start_timer(void)开始计数器计数(ACC=state flags;/把状态标志字读到ACC便于进行位操作Timer_flagl=l;Timer_flag2=l;state_flags=ACC;位操作完成,把ACC的内容写回状态标志字 a8155_CON=state flags;/写控制字,完成对8155的设置)/-/函数名称:stop timer/输入函数:无/输出参数:无/功能说明:停止计数器计数,/-.-void stop timer(void)停止计数器计数(ACC=state_flags;/把状态标志字读到ACC便于进行位操作Timer_flagl=l;Timer_flag2=0;state_flags=ACC;/位操作完成,把
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:100例单片机程序设计范例汇总(完全).pdf
    链接地址:https://www.zixin.com.cn/doc/5459584.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork