《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2_第1页
《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2_第2页
《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2_第3页
《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2_第4页
《单片机的C语言程序设计与运用(第2版)》期末复习题及答案2_第5页
免费预览已结束,剩余35页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章中断类例4-1P104假设外部中断0和外部中断1均为下降沿触发,当外部中断0发生时,P0端口的电平反向,当外部中断1发生时,P1端口的电平反向U1AT89C5117"P37/RDP17P3.6AnJRPL6P3.5/T1PI5P3.4/TDPL4P3.3/INT1PL3P3J/IN1DPL2P3.1fD(DPL1P3.D/RXDPLOP2.77A15P2.67A14P2.5/A13EAP2.4/A12ALEP2.3/A11P$ENP2.2/A10P2.网P2.山纳P0.7/AD7R$TP0.6/AD6PO.5/AD5P0.4/AD4POJ/AD3XTA12PO.2/AD2PO.

2、1/AD1PO.O/AEOXTAL1<816J"7_15614:fl切412:11210"120-31272625'3024202g22-2132"33ie34-35二36"37193839R1interrupt0/P0端口反向interrupt2/P1端口反向#include<reg51.h>voidIS0(void)P0=P0;voidIS1(void)P1=P1;voidmain()P0=0x00;P1=0xFF;IT0=1;IT1=1;EX0=1;EX1=1;EA=1;while(1);在本实例中,首先通过P1.7口点亮

3、发光二极管D1,然后外部输入一脉冲用,那么发光二极管D1亮、暗交替.U1AT89C612122"232425-2627"VGND28/ID"1112'13B14f152167?"P2S巡P2.1回P2,2/A10P2,3/A11P2.4/A12P2.5/A13P2.6/A14P27/A15P3.0/RXDP3J/TXDP3.2/IN1DP3.3/INTTP34/TDP3,5(T1_P3.6逅P37/RUPSENALEEAPhDPI.2PL3PI.4PI.5PI.6P171235-678vcc293031R1470R#include<reg5

4、1.h>sbitP1_7=P1A7;voidinterrupt0()interrupt0using2/外部中断0P1_7=!P1_7;voidmain()EA=1;开中断IT0=1;/外部中断0脉冲触发EX0=1;外部中断0P1_7=0;dowhile(1);如果有3个脉冲,那么灯亮、暗交替一次,可如下面编程:#include<reg51.h>SbitP17=P1A7;unsignedchari=3;voidmain()EA=1;IT0=1;EX0=1;dowhile(1);voidinterrupt0()interrupt0i=i-1;if(i=0)P17=!P17;i=3

5、;【例4-10如图4-18所示,8只LED阴极接至单片机P0口,两开关S0、S1分别接至单片机引脚P3.2()和P3.3().编写程序限制LED状态.按下S0后,点亮8只LED;按下S1后,变为闪烁状态.47DR470R17161514iT"12,11,102S"27262524;23"P3.77RDPI7P3.6/WRP1.6P3.5/T1P1.5P34ToPL4P3.3/INT1P1.3P3.MNTDPI.2P3.1/D(DPklP3D/RXDFEOP27/A15P2.6XA14P2.6/A13EAP2.4/A12ALEP2.3/A11PSENP22XA1DP

6、2.1,施P20/PBP07/AD7RSTP06/AD6P0.5/AD5P04TAD4P03/AD3XTAL2PD.2/AD2P0.1XAD1PD.D/ADOXTAL1<U1ATO0C511921#include<reg51.h>sbitP32=P3A2;voiddelay(unsignedintd)/定义延时子函数while(-d>0);voidmain()P0=0xFF;/熄灭LEDIT0=1;IT1=1;外中断0、1脉冲触发方式EA=1;EX0=1;EX1=1;/开中断for(;)/延时等待中断发生;)voidINT0_ISR()interrupt0/外中断0中断

7、效劳函数P0=0x00;voidINT1_ISR()interrupt2/外中断1中断效劳函数while(P32!=0)如果有外部中断0,那么退出delay(5000);P0=0x00;delay(5000);P0=0xFF;定时类【例4-16】设单片机的fosc=12MHz,要求在P1.0上产生周期为2ms的方波.要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性定时,定时到对P1.0取反.要产生1ms的定时,应选择方式1,定时器方式.TMOD确实定:选择定时器/计数器T0,定时器方式.方式1,GATE不起作用,高4位为0000,TMOD=01H.TH、TL确实定:单片机的fo

8、sc=12MHz,那么单片机的机器周期为1ms,1ms=1000ms,计数器的计数初值为65536-1000,TH0=(65536-1000)/256,TL0=(65536-1000)%256.采用查询方式程序如下:#include<reg51.h>sbitP1_0=P1A0;voidmain(void)TMOD=0x01;TR0=1;for(;)TH0=(65536-1000)/256;TL0=(65536-1000)%256;dowhile(!TF0);P1_0=!P1_0;TF0=0;采用中断方式程序如下:#include<reg51.h>sbitP1_0=P1A

9、0;voidtimer0(void)interrupt1using1P1_0=!P1_0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;voidmain(void)TMOD=0x01;P1_0=0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;dowhile(1);U1AT80C51P3.4/T10P1.4P3.3/INTTP1.3P3.2/1NTDPk2P3JJTXDP1.1P3.0/RXDproP27/A15P2.6/A14_P2.5/A13EAP2.4/A12ALEP2.3<

10、;A11PSENP2.2/A1DP2.1,用P07/AD7R$TP0WAD6P0.5/AD5【例4-17】设系统时钟频率为12MHz,编程实现从P1.1输出周期为1s的方支.要输出周期为1s的方波,应产生500ms的周期性定时,定时到那么对P1.1取反即可实现.由于定时时间较长,一个定时器/计数器不能直接实现,一个定时器/计数器最长定时时间为65ms多一点,可以用以下两种方法实现.(1)方法一用定时/计数器T0产生周期性为10ms的定时,然后用一个变量对10ms计数50次.系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,选方式1,方式限制字为B(01H),那么初值X为

11、X=65536-10000.U117P3.7/RDP1.7816P3.6/WR-P1.6715P3.5/T1P1.5P34/T0P14614513P3.3/INT-P1.3412P3.2/INT0-P1.23P3.1/TXDP1.1P30/RXDP10210128P2.7/A15P2.6/A14P2.5/A13EA27263125_241P2.4/A12ALEP2.3/A11PSENP2.2/A10P2.1/A9P2.0/A8P0.7/AD7RSTP0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3XTAL2P0.2/AD2P0.1/AD1P0.0/AD0XTAL1d3012923

12、2221329333435361837383919AT89C51/定义计数变量/初始化#include<reg51.h>sbitP1_1=P1A1;unsignedchari;voidmain()i=0;TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;while(1);)voidtime0_int(void)interrupt1中断效劳程序TH0=(65536-10000)/256;重载初始值TL0=(65536-10000)%256;/重载初始值i+;/每发生一次中断,计数变量加1if(

13、i=50)/发生50次中断,定时0.5msP1_1=!P1_1;i=0;/计数变量清零)(2)方法二用定时/计数器T1计数实现,对10ms计数50次.定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入.设定时/计数器T0定时时间到对P1.0取反一次,那么T1(P3.5)每10ms产生一个计数脉冲,那么定时500ms只需计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231,TH1=TL1=231.由于定时/计数器T0工作于方式1,定时方式,那么这时方式限制字为B(61H).定时/计数器T0和T1都采用中断方式工作.17P3.7/RDP1.7P3.6/WR-P1

14、.6P3.5/T1P1.5816-r1561413工1P3.4/T0P1.4P3.3/INT丁P1.3P3.2/INT0-P1.2P3.1/TXDP1.1P3.0/RXDP1.0P2.7/A15P2.6/A145"4""2"1012827311""302625P2.5/A13EAP2.4/A12ALE2429P2.3/A11PSENP2.2/A10P2.1/A9P2.0/A8P0.7/AD7RSTP0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3XTAL223222-32933343536183738P0.2/AD2P0

15、.1/AD1P0.0/AD0XTAL143919AT89C51U1#include<reg51.h>sbitP1_1=P1A1;sbitP1_0=P1A0;voidmain()TMOD=0x61;初始化TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=231;TL1=231;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1);)voidtime0_int(void)interrupt1TH0=(65536-10000)/256;TL0=(65536-10000)%256;P1_0=!P1_0;)/T0中断效劳程序

16、/重载初始值/重载初始值voidtime1_int(void)interrupt3P1_1=!P1_1;/T1中断效劳程序【例4-18】设系统时钟频率为12MHz,编程实现:P1.1引脚上输出周期为1s,占空比为20%的脉冲信号根据输出要求,脉冲信号在一个周期内高电平占0.2s,低电平占0.8s,超出了定时器的最大定时间隔,因此利用定时器0产生一个基准定时配合软件计数来实现.取50ms作为基准定时,采用工作方式1,这样这个周期需要20个基准定时,其中高电平占4个基准定时.#include<reg51.h>sbitP1_1=P1A1;unsignedchari;/定义计数变量void

17、main()i=0;TMOD=0x01;/初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1);)voidtime0_int(void)interrupt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;/中断效劳程序/重载初始值i=i+1;if(i=4)P1_1=0;elseif(i=20)P1_1=1;/高电平时间到变低周期时间到变高i=0;/计数变量清零U1AT8QC511311»1D»"28"26T25,24232f

18、32羽.34-P27/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A1DP2.1闺P2W闱PO7/A137POB/AD0PO5/AD5EAALEPSENRSTP3.4/TOPL4P3.3/JNTLPL3P3.2/IN1DP1二P11E(口PIJP3.D/RXDP1.0l3_1302&弟五早【例5-9】用行自发自收UIATO9C5I54"3'-2r1TE虹口近工上门一如一上如近中一吐"111H112-2-2-2-2-2-2-2-2-2-3-3-3甯.况.39"P2.7/RDP3.6Af¥R用5m.可710

19、pa.a/itnT叩&丽币ps.inxD图WRMOP27伊15?2.C/A14阻5rAi5M.47冏2P2.3/A11P2.2/A1OR21/MP工口倒P0.7/AD7PC.e/Affi叩.52刖.中国*P0.3/AD3PdPC.I/AD1P0.WADDKTAL1wcc#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintvoidmain()uchari=0x55;uintj=0;TMOD=0X20;/设定定时器1模式2TL1=TH1=0XF4;PCON=0X00;SCON=0X50;TR1=1;whi

20、le(1)SBUF=i;/发送数据do()while(!RI)RI=0;TI=0;i=SBUF;/读取接收数据P1=i;i=i;/将发送数据取反for(j=0;j<12500;j+);【例5-10】两个单片机串行通信1oowqadlLow-dor豆苻豆eowwndl-34,E2nwb-aL意®£IWNLrw«'2寻mlws寸iwe口XEmmILKt-2.,ED.FItzll/yNdEfMJVaffd回叫£bHNE门EELIXCLDLcnwqndl-owns<sdt豆晶£?-£niwzLIWEUMmIW5寸IWO91

21、ag口XEmmu.口xl/lmilaLNW,:EBIENW£LWdwvgEn.剧叫£LMJX.-1l-SKNwsln.UJm6LwlxAU1/W9CS1删删单片机1的C51源程序代码:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharvoidmain()uchari;TMOD=0x20;TH1=TL1=0xff;SCON=0x50;PCON=0x80;TR1=1;P1=0xff;while(1)P1=0xff;i=P1;SBUF=i;while(TI=0);TI=0;单片机2的C51源程

22、序:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharvoidmain()uchari=0;TMOD=0x20;TH1=TL1=0xff;SCON=0x50;PCON=0x80;TR1=1;while(1)while(RI=0);RI=0;i=SBUF;P1=i;两个单片机串行通信2C51源程序代码如下:#include<reg51.h>/TR=1,发送/等待乙机应答信号/乙机未准备好,继续联络/用行口初始化子函数/发送/接收/T1工作于方式2用行口工作于方式1,REN=1/发送联络信号/等待一

23、帧发送完毕/发送完毕,标志位满0校验和变量满0/发送一个数据#defineucharunsignedchar#defineTR1ucharidatabuf10;ucharpf;voidmain()int();if(TR=0)send(buf);elsereceive(buf);/*用口初始化子函数*/voidinit(void)TMOD=0x20;TH0=0xE8;TL0=0xE8;TR1=1;SCON=0X50;/*发送子函数*/voidsend(ucharidata*d)uchari;doSBUF=0xAA;while(TI=0);TI=0;while(RI=0);RI=0;while(S

24、BUFA0xBB!=0);dopf=0;for(i=0;i<10;i+)SBUF=di;pf+=di;/计算校验和while(TI=0);TI=0;SBUF=pf;while(TI=0);TI=0;while(RI=0);RI=0;while(SBUF!=0);/*接收函数*/voidreceive(ucharidata*d)uchari;dowhile(RI=0);RI=0;while(SBUFA0xAA)!=0);SBUF=0xBB;while(TI=0);TI=0;while(1)pf=0;for(i=0;i<10;i+)di=SBUF;pf+=di;while(RI=0);

25、RI=0;If(SBUFApf)=0)SBUF=0x00;break;elseSBUF=0xFF;while(TI=0);TI=0;/发送校验和/等待乙机应答/答复出错,那么重新发送判断甲机是否请求/发应答信号/清校验和/接收数据/计算校验和/接收甲校验和比拟校验和/校验和相等发0x00/校验和不相等,发0Xff第六章静态:【例6-1】利用单片机的并行作为静态显示的输出口的例如6-»(TAL1IPO.D/dADDP0J/AD1P0.3/AD3ndu?4DidXTALIrU-WjKU4po-syAos口门77AFT?口CTrU-fAHUrP2.1ZflP2.2ZA1DPSENALEcX

26、P2.3/A11PiAfAlino匹,P2.7XA15PI0Pl1Pl,2Pl3PI4PI5PI.6PI7口勺flr-J.UPSAlUP3.1/D(Ci口嚏iTFTTT沪/一强1uP3.5/T1P3.6>rJnUig18U1W189C51a.363-374-3656-34?*338"222110»罡25VCC2628ID2"11L12413S"146-15?"1617gF!"NDR1GNDfiOBOAl62AJB3A*B4洛B56眦汽B7AB/BA1917!®10"151413h1211U274LS245an

27、OUei口.B3Rdno&GB77rpLcMO/BrrU3'171015141312R9静态轮流显示“12-"和“AEfflC51源程序如下:#include<reg51.h>#defineucharunsignedcharuchardatadis_buf2;/显示缓冲区ucharcodeable18=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00;/显示的代码表voiddl()unsignedinti;for(i=0;i&l

28、t;40000;i+);voiddisplay(void)/显示函数ucharsegcode;segcode=dis_buf0;/°0口显示segcode=tablesegcode;P0=segcode;segcode=dis_buf1;/P3口显示segcode=tablesegcode;P3=segcode;voidmain(void)主函数while(1)dis_buf0=1;dis_buf1=2;/显示12display();dl();dis_buf0=16;dis_buf1=16;/显示-display();dl();dis_buf0=10;dis_buf1=11;/显示A

29、Bdisplay();dl();)例如中的显示函数display.可以再简单一些,如下面程序段:voiddisplay(void)P0=tabledis_buf0;/P0口显示P3=tabledis_buf1;/P3口显示)动态:【例6-3】利用MCS-51单片机的并行口作为动态显示的段口与位口的例如6位数码管动态显示的C51源程序如下1)随机调用#include<reg51.h>#defineucharunsignedcharuchardatadis_buf6;/显示缓冲区ucharcodetable18=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x

30、07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00;/代码表voiddl_ms()延时1ms函数unsignedintj;for(j=0;j<200;j+);voiddisplay(void)显示函数ucharsegcode,bitcode,i;bitcode=0xfe;/位码赋初值for(i=0;i<6;i+)segcode=dis_bufi;/显示缓冲器内容查表P0=tablesegcode;P3=bitcode;dl_ms();P3=0xff;关闭显示bitcode=bitcode<<1;/调整位码bitcod

31、e=bitcode|0x01;)voidmain(void)dis_buf0=1;dis_buf1=2;dis_buf2=3;dis_buf3=4;dis_buf4=5;dis_buf5=6;while(1)display();)(2)定时调用定时调用是通过定时器/计数器的定时功能来定时一定的时间(如20ms),定时时间到来调用显示函数.voidmain(void)定时调用TMOD=0x01;TH0=-20000/256;TL0=-2000%256;EA=1;ET0=1;TR0=1;dis_buf0=1;dis_buf1=2;dis_buf2=3;voidtime0_int()interrup

32、t1TH0与0000/256;TL0=-2000%256;display();)dis_buf3=4;dis_buf4=5;dis_buf5=6;while(1);)【例6-6】独立式按键例如恒T巾GNB7C51源程序如下:>XTAL1FDOHDDP口川DIP口皿DNXTAL2PEiaftDJR©TFtL?jADTP2,19股决1口PSENF2311ALEP2,412EA吆&*HP2.7A15F1£113Mx口P1.1?3.imCDP12"到1所市P33flNT1pi.<pa.muiF1J5知T1P1£n?mxffFU1AH3SC51

33、2等traR10IiI121IIJ2U传玉17#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchardatakey2;codeuchardirtab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80;voiddl_6()uinti;for(i=0;i<600;i+);voidkey()ucharkey1;P1=0xff;key1=P1;if(key1!=0xff)dl_6();P1=0xff;key1=P1;if(key1!=0xff)key1=P1;sw

34、itch(key1)case0xff:key2=8;break;case0xfe:key2=0;break;case0xfd:key2=1;break;case0xfb:key2=2;break;case0xf7:key2=3;break;case0xef:key2=4;break;case0xdf:key2=5;break;case0xbf:key2=6;break;case0x7f:key2=7;break;default:break;voidmain()key2=8;while(1)(key();P3=dirtabkey2;)【例6-7】4X4矩阵键盘例如也胸理期咂m.WJi咋册If范如

35、K比牺T町期11吃UM2PU5WI13空用I*n.inisP'DF'D031至fjjiFtFN.<TDTJ£FT1_F17FGUO#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchardatadir_buf;codeuchardirtab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40;codeucharkeytab=0xee,0xed,0xeb,0

36、xe7,0xde,0xdd,0xdb,0xd70xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77;voiddelay(void);voidkeyscan();voiddir();ucharkey;voidmain(void)dir_buf=16;while(1)keyscan();dir();)voiddir()P2=dirtabdir_buf;voiddelay(void)uchari;for(i=0;i<200;i+);voidkeyscan()ucharcode_h,code_l,i1,i2;P1=0xf0;所有的彳r输出0code_l=P1;/读列值c

37、ode_l=code_l&0xf0;/屏蔽掉高4位if(code_l!=0xf0)delay();/P1=0xf0;code_l=P1;code_l=code_l&0xf0;if(code_l!=0xf0)code_h=0xfe;for(i1=0;i1<4;i1+)kk:P1=code_h;code_l=P1;code_l=code_l&0xf0;if(code_l=0xf0)code_h=(code_h<<1)|0x01;gotokk;gotoll;/forll:code_h=code_h&0x0f;key=code_h+code_l;for

38、(i2=0;i2<16;i2+)if(key=keytabi2)dir_buf=i2;)*【例6-10一个8X8共阴极LED点阵显示ILOVEYOU(不用记)一个8X8在某一个时刻只能显示一个字符,要想显示字符串,必须在显示完一个字符后接着显示下一个字符,因此需要建立一个字符串库.由于每个字符有8个段码值,该字符串有8个字符,所以该字符串库中有8X8共64个段码值.字符串ILOVEYOU的字模段码值I00H,00H,42H,7EH,42H,42H,00H,00HL00H,42H,7EH,42H,02H,02H,02H,00HO00H,3CH,22H,42H,42H,22H,3CH,00H

39、V00H,40H,70H,0CH,0CH,70H,40H,00HE00H,42H,7EH,4AH,4AH,5AH,22H,00HY00H,40H,62H,1EH,12H,60H,40H,00HO00H,3CH,22H,42H,42H,22H,3CH,00HU00H,7CH,46H,02H,02H,7CH,40H,00HPI.7P3.7/TOFl6P3.6AAFFl5P35/T1P»4P3.4ZTDFl.3P3,MNT1PI2P3.2/INTOP1JP3.1/TXDF1.0P3JWRXOP2.7/A15P2.6/A14EAP2.5/A13WEPSEMP1.3/A11P2.2/A10P2

40、.1/淡PLftWGR£TP07;AD7PD.S/AD6FD.5/MJ5P0.47AD4XTALtPD.3/AD3PD.2/AD2FO.UADII,XTAUPD.D/ADOU134235相37二招国175、16t15&六141312311121>101日Y7EY16ElY5Y4nCYIYlAU274LS13SUTZRP1110k#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharcodeuchartab1=0x00,0x00,0x42,0x7e,0x42,0x42,0x00,0x00,

41、/I0x00,0x42,0x7e,0x42,0x02,0x02,0x02,0x00,/L0x00,0x3c,0x22,0x42,0x42,0x22,0x3c,0x00,0x00,0x40,0x70,0x0c,0x0c,0x70,0x40,0x00,x00,0x42,0x7e,0x4a,0x4a,0x5a,0x22,0x00,0x00,0x40,0x62,0x1e,0x12,0x60,0x40,0x00,0x00,0x3c,0x22,0x42,0x42,0x22,0x3c,0x00,0x00,0x7c,0x46,0x02,0x02,0x7c,0x40,0x00;/Ucodeuchartab2=0

42、x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;dataucharj;voiddelay(uintn)datauinti;for(i=0;i<n;i+);voiddir()dataucharh,v=0;for(h=j;h<j+8;h+)P0=tab1h;P3=tab2v;delay(555);P3=0xff;v+;if(v=8)v=0;)voiddl()uintr;for(r=0;r<40;r+)dir();voidmain(void)while(1)j=0;dir();dl();j=8;dir();dl();j=16;dir();dl();j=

43、24;dir();dl();j=32;dir();dl();j=40;dir();dl();j=48;dir();j=56;dir();dl();*例6-12编程在LCD1602上显示由键盘输入的字符或数字.(不用记)JM31M|闻?A23M5陋f""7fXTALIPD.Dj>ADDPOJ/DIP0.2JAD2XTA12PD.1ZAD5FD.4>AD4PD.5WD5PD.WADSfiSTFCI.7/AD7F2J/WP2.JZAWP2.3/A114LEP2.4/A11亭P2.5W13P2.9M14FLOP.MRXDF1.1F3.1/TXDP1,2Pq.irtNTU

44、P1.3P3.MNT1PI.4P3.4/TOP1.SP3.5/TIIP1.6P3B丽PI.7P3?/RffU2JU39C51I1X._I=LjQQ<寸<=.li,IOQ_<IQO口«-.11>iO-'11,1-0c1,o-1Lr-1II*_L>|*1.1,1oo".11产.-IL-"Oo|iO,一_n0/S51+1602,晶振为12M#include"reg51.h"#include"intrins.h"#include"absacc.h"sbitRS=P3A5;sb

45、itRW=P3A6;sbitE=P3A7;#definebusy0x80#defineucharunsignedchar#defineuintunsignedintuchara=,0,1,2','3',4','5',6,7','8',9,a,'b,c,d,e,f,;voiddelay_LCM(uchark)/延时函数uinti,j;for(i=0;i<k;i+)for(j=0;j<60;j+);)voidtest_1602busy()/测忙函数P1=0xff;E=1;RS=0;RW=1;_nop_();

46、_nop_();while(P1&busy)检测LCDDB7是否为1E=0;_nop_();E=1;_nop_();E=0;voidwrite_1602Command(ucharco)/写命令函数test_1602busy();/检测LCD是否忙RS=0;RW=0;E=0;_nop_();P1=co;_nop_();E=1;/LCD的使能端高电平有效_nop_();E=0;voidwrite_1602Data(ucharData)/(test_1602busy();P1=Data;写数据函数RS=1;RW=0;E=1;_nop_();E=0;voidinit_1602(void)/初始

47、化函数(write_1602Command(0x38);显示)delay_LCM(5);write_1602Command(0x01);/LCD功能设定,DL=1(8位),N=1(2行/去除LCD的屏幕delay_LCM(5);write_1602Command(0x06);1)delay_LCM(5);write_1602Command(0x0F);delay_LCM(5);/LCD模式设定,I/D=1计数地址加/显示屏幕voidDisplayOneChar(ucharX,ucharY,ucharDData)(Y&=1;X&=15;if(Y)X|=0x40;假设y为1(显示第

48、二行),地址码+0X40X|=0x80;/指令码为地址码+0X80write_1602Command(X);write_1602Data(DData);voiddisplay_1602(uchar*DData,X,Y)/显示函数ucharListLength=0;Y&=0x01;X&=0x0f;while(X<16)(DisplayOneChar(X,Y,DDataListLength);ListLength+;X+;voiddelay(uinti)/延时程序uintj;for(j=0;j<i;j+);ucharcheckkey()/检测有没有键按下uchari;ucharj;j=0x0f;P2=j;i=P2;i=i&0x0f;if(i=0x0f)return(0);elsereturn(0xff);ucharkeyscan()/键盘扫描程序ucharscancode;ucharcodevalue;uchara;ucharm=0;uchark;uchari,j;if(checkkey()=0)return(0xff);elsedelay(100);if(checkkey()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论