1第一章设计要求及系统组成一、基本操作时序:读状态:输入:RS=L,RW=H,E=H输出:D0~D7=状态字写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:无读数据:输入:RS=H,RW=H,E=高脉冲输出:D0~D7数据写数据:输入:RS=H,RW=L。D0~D7=数据,E=高脉冲输出:无二、、、状态字说明:STA7D7\STA6D6\STA5D5\STA4D4\STA3D3\STA2D2\\STA1D1STA0-6:当前数据地址指针的数值STA7:读写操作使能1表示禁止,0表示允许对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0;但是我们可以进行延时进行实现。RAM地址映射:LCD16字*2行00010203040506070808090A0B0C0D0E0F…274041424F50…67指令说明:1.初始化设置1.显示模式设置指令码:00111000(0x38)功能:设置16*2显示,5*7点阵,8位数据接口必须开显示2.显示开、关及光标设置指令码:00001DCB,功能:D=1开显示;D=0关显示;C=1显示光标;B=1光标闪烁;B=0光标不显示000001NS:功能:N=1当读或写一个字符后地址指针加1,且光标加1;N=0相应的减1;S=1当写一个字符,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果。S=0当写一个字符,正屏显示不移动。2数据控制:控制器内部设有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM4.2.1数据指针设置:指令码:80H+地址码(0-27H,第二行开始:40H-67H)4..2.2读数据,写数据其它设置:01H:显示清屏:1.数据指令清零2所有显示清零02H:显示回车:1.数据清零如何进行连接:实际操作中,液晶接到,第一管脚是D,第二管脚是VCC,15和16是背光,D0-D7是数据口,接到单片机的P0口,P0口接了两个锁存器,液晶,D/A,具有高阻状态的都可以随便接,没有影响,,第六管脚是LCDEN相当于E,使能信号,它接P3^4,R/W接地,表示低电平,因为我们只进行写操作,RS接2实验板上的P3^5;只需这两端口便足以控制液晶,2和3是偏压信号,一端接地,接口信号说明:编号:1VSS(符号表示)电源地(引脚说明)2VDD电源正极3VL液晶显示偏压信号4RS数据/命令选择端(H/L)5R/W读写选择端(H/L)6E使能信号7D0Data1/08D1Data1/09D2Data1/010D3Data1/011D4Data1/012D5Data1/013D6Data1/014D7Data1/015BLK背光源正极16BLK背光源负极实际操作:::3先写光标程序;写两个子程序,一个写数据,一个写指令:先进性两个宏定义,再位申明LCDEN与RS;为了电量充足。初始化时关断数码管,定义数码管的两个锁存端,dula与wela,P2^6与P2^7,先写主函数(调用初始化函数,在调用数据子函数(’1’),从右向左滚动进来Code:RSR/WDB7DB6DB5DB4DB3DB2DB1DB0000001S/CR/LxxS/RR/L描述00光标左移01光标右移10显示左移,光标跟着左移11显示右移,光标跟着右移),再写初始化函数(先关断数码管,在进行显示模式设置,显示开、关及光标设置,设计数据),接着写命令子函数writer——com(开始操作时序,写指令,P0口送的指令码,接着需要延时一段时间让E变成高电平,在持续一段时间,E再变低),它由所用的指令直接调用即可。。。。。。。。。。。。再写一个写数据的子函数writer_data(lcdrs=1),需用延时子函数。4Ucharcodetable[]={“”}注意:为了使得黑托不出现,应该屏幕全部清零writer_com(0x01)。???????xdata:外部地址空间1.1设计要求利用单片机最小系统设计一个电子时钟,显示方式为**:**:**,并且可以任意修改时间。1.2系统组成原理框图如图1.1图1.1系统原理框图单片机复位电路时钟电路按键电路1602显示模块5第二章系统设计方案2.1系统设计方案电路原理图如图2.1所示图2.1电路原理图2.2电路模块组成及其工作原理62.2.1时钟电路系统时钟源由内部时钟方式产生,时钟电路由12MH晶振和两个30PF瓷片电容组成,构成自激振荡,形成振荡源提供给单片机。电容可在5PF到30PF之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。时钟电路如图2.2所示图2.2时钟电路2.2.2复位电路单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用RC充电来实现复位。手动复位是通过人为干预,强制系统复位。复位电路如图2.3所示,可以实现上电复位和手动复位功能。图2.3复位电路2.2.3按键电路在单片机的P1.0、P1.1、P1.2三个I/O口接三个简易按键,通过不断检测按键状态,识别按键的按下顺序和次数即可实现时间的任意修改。按键电路如图2.4所示。2.2.41602液晶显示模块电路7本设计是通过对1602液晶显示屏的控制来实现时间的显示。1602液晶显示模块的驱动如下所述:图2.41602液晶屏实物图1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当8RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线第15~16脚:空脚1602显示屏的时序图如图2.5。图2.51602时序图1602液晶显示屏与单片机的连线图如图2.6所示。9图2.61602与单片机连线图第三章程序设计及其调试3.1程序设计程序设计如下:#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitlcdrs=P2^0;sbitlcswr=P2^1;sbitlcden=P2^2;sbits1=P1^0;sbits2=P1^1;10sbits3=P1^2;sbitrd=P3^7;ucharcount,s1num;charmiao,shi,fen;ucharcodetable[]=2011-6-14TUN;ucharcodetable1[]=00:00:00;voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidwrite_com(ucharcom){lcdrs=0;lcswr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_date(uchardate){lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;11delay(5);lcden=0;}voidinit(){ucharnum;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;12}voidwrite_sfm(ucharadd,uchardate){ucharshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}voidkeyscan(){rd=0;if(s1==0){delay(5);if(s1==0){s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);13}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2)14{fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1)miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);15}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}voidmain(){init();while(1){keyscan();}}16voidtimer0()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}3.2实验调试17实验过程中出现了很多的问题,经过反复的程序修改和调试,最终完成了本设计的要求,实现了电子时钟功能。在电路焊接前,通过protues单片机仿真软件多次调试和仿真,得出了正确的实验结果。Protues仿真图如图3.1所示。图3.1protues仿真图结论经过两周的课程设计,不断的测试与分析,最终完成了电子时钟的设计与制作。在实验的设计及仿真测试时,当没有得出正确的实验现象是,必须冷静、沉着的思考问题的来源,切勿太过紧张。在电路的焊接过程,须仔细再仔细,案部分焊接导线,切勿乱了头绪。这样才能在电路制作过程中减少许多不必要的错误。本次设计组要是程序设计部分,在程序设计过程中,出现了很多的问题,经过和组员的多次讨论与研究、,并参阅了一些电子资料,解决的很多难题。此课程设计主要考察了对单片机技术原理