C51液晶显示时钟(可调整时间).doc_第1页
C51液晶显示时钟(可调整时间).doc_第2页
C51液晶显示时钟(可调整时间).doc_第3页
C51液晶显示时钟(可调整时间).doc_第4页
C51液晶显示时钟(可调整时间).doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

C51时、分、秒计时器设计班级0931 姓名(学号)刘28)甘(27)宁(13)赵(30)项目分工总体设计方案构思、程序模块构成、仿真电路构成等内容I2C总线程序模块、液晶初始化、液晶显示模块函数设计定时中断、时分秒处理、按键模块函数设计仿真电路设计及调试一、任务及要求用51单片机设计时、分、秒计时器,具体要求如下。1、 具有时、分、秒计时功能和8位lcd1602显示功能,显示格式为:“时分秒”;2、 用Proteus设计仿真电路进行结果仿真;3、 完成程序设计、仿真电路设计、结果仿真,完成报告并上传空间课程栏目中的课程设计报告子栏目中。二、 设计方案1、总体设计方案(刘负责完成)(1)、仿真电路构成:电路分4个模块:晶振电路模块、I2C总线模块、按键模块、液晶显示模块。晶振电路模块负责给单片机提供时钟周期;利用AT89C51芯片内部的T0定时器定时,定时1s到则使时间进行一次变化,要使时间显示在液晶上则在电路中添加8位lcd1602液晶;I2C总线模块是存储时分秒数据的,时间每变化一次都将其数据保存在AT24C02中;按键模块中,采用四个按键作为电子时钟的控制输入,通过按键来实现时钟的时间调整功能。电路中将四个按键的一端接公共地,而单片机的P3口默认为高电平,一旦按键被按下,则该按键对应的额管脚被拉低,通过软件扫描按键即可知道用户所要实现的功能,调用相应的按键子程序来完成该操作。按键的去抖动由软件来实现,如下图所示,分别按下“ 1、4、7、* ”四个按键可以调整时和分。(2)、程序模块构成:本系统的软件系统主要可分为I2C总线程序模块、定时计数中断程序、按键识别程序、数据处理程序、液晶显示程序、延时程序六大模块。 I2C总线程序模块:包含的子程序模块有起始信号、终止信号、应答信号、初始化、写一字节、读一字节、写数据、读数据等。是将每次时间变化(即约1s变化一次)后的数据保存在AT24C02中,断电后,下次再上电时可读取断电时所保存的数据,接着继续计时;定时中断模块:采用51单片机内部T0定时器定时,定时50ms,再循环20次,即可得到50ms*20=1s的时间,定时1s到了之后使得秒自加1,当秒到了60时,秒重新赋值为0且分加1,当分到了60时,分重新赋值为0且时加1;按键识别模块:此模块是对时和分进行调整,检测四个按键,其功能分别是分+1、分-1、时+1、时-1,当检测到某一按键按下时执行相应的操作实现对时间的调整,此过程中主要要注意按键消抖的问题;数据处理模块:此模块是将时、分、秒的个位和十位分开,保存在数组中,供显示模块使用; 液晶显示模块:此模块是将时、分、秒显示在液晶屏上。此模块包括液晶写指令子程序、液晶写数据子程序、液晶初始化子程序。首先进行液晶初始化,然后选择数据地址指针(即写指令,选择要显示在液晶屏的哪个位置),再延时一会利用fou循环将要显示的时钟数据显示到液晶屏幕上(写数据)。各模块流程图如下: 2、 I2C总线模块、液晶显示、按键模块程序流程图(甘 负责完成) 如上所示3、 定时中断、数据处理、模块程序流程图(宁负责完成) 如上所示4、 仿真电路设计(赵负责完成)如下所示: 三、程序清单#include#define uchar unsigned char#define uint unsigned intuchar table111=0,1,2,3,4,5,6,7,8,9,-;uchar table28=0,0,10,0,0,10,0,0; /存放时、分、秒uchar table312=clock-12hour;sbit dula=P26;/初始化时将数码管的位选和段选信号赋值为0,因为液晶sbit wela=P27; /和数码管都是从P0口传数据的,防止将数据传到数码管sbit sda=P20;/定义I2C总线中的数据线SDA所接引脚sbit scl=P21; /定义I2C总线中的时钟线SCL所接引脚uchar a;sbit en=P34; /使能信号控制端sbit rs=P35;/数据/命令选择端(H/L)sbit rw=P36;/读/写控制端 (H/L)/定义开发板上的四个独立按键所接的IO口sbit s2 = P30; /每按一次分加1sbit s3 = P31; /每按一次分减1sbit s4 = P32;/每按一次时加1sbit s5 = P33;/每按一次时减1sbit p3_7=P37;/让其置0时,s9、s13、s17、s21相当于独立按键uchar count; /定义无符号字符型数据“count”,用于计数20次达到20*50ms=1suint shi,fen,miao,shis,shig,fens,feng,miaos,miaog;/定义时、分、秒以及时、分、秒的十位和个位/*I2C总线子程序*/void delay3() ; void start() /起始信号,SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号sda=1;delay3();scl=1;delay3();sda=0;delay3();void stop() /终止信号,SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 sda=0;delay3();scl=1;delay3();sda=1;delay3();void respons() /应答信号,每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB), /每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。 uchar i;scl=1;delay3();while(sda=1)&(i250)i+;scl=0;delay3();void init1() / I2C总线sda=1;delay3();scl=1;delay3();void write_byte(uchar date) / I2C总线uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;scl=0; /只有在时钟线上的信号为低电平期间,数据才允许变化。 delay3();sda=CY;delay3();scl=1; /时钟信号为高电平期间,数据线上的数据必须保持稳定 delay3();scl=0;delay3();sda=1;delay3();uchar read_byte() / I2C总线uchar i,k;scl=0;delay3();sda=1;delay3();for(i=0;i8;i+)scl=1;delay3();k=(k0;a-) for(b=100;b0;b-);/单片机进行写操作时,首先发送该器件的7位地址码和写方向位“0”(共8位,即一个字节),/发送完后释放SDA线并在SCL线上产生第9个时钟信号/被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,/单片机收到应答后就可以传送数据了void write_add(uchar address,uchar date) / I2C总线start();write_byte(0xa0); /AT24C系列E2PROM芯片地址的固定部分为1010,开发板上的A2、A1、A0引脚接低 /电平所以形成的7位编码即为该器件的地址码a0。respons();write_byte(address);respons();write_byte(date);respons();stop();/单片机先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放/SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己/的地址后,在SDA线上产生一个应答信号作为回应。然后,再发一个字节的/要读出器件的存储区的首地址,收到应答后,单片机要重复一次起始信号并/发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节 uchar read_add(uchar address) / I2C总线uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;/*/延时子程序1用于读写操作时序图上的的短暂延时void delay1(uint z)uint x,y;for(x=z;x0;x-) for(y=10;y0;y-);void delay2(uint z)uint x,y;for(x=z;x0;x-) for(y=10;y0;y-);/液晶写指令子程序void write_com(uchar com)P0=com; /将命令传至P0口rs=0; /写的是命令故将其置零en=0; /根据写操作时序图,传命令前en=0delay1(10); /根据写操作时序图,延时一小会en=1; /en=1时开始传输命令delay1(10); /延时一会待命令传完en=0; /命令传完再将其置0/液晶写数据子程序void write_date(uchar date) P0=date; /将数据传至P0口 rs=1;/写的是数据故将其置1en=0; /根据写操作时序图,传数据前en=0delay1(10); /根据写操作时序图,延时一小会en=1; /en=1时开始传输数据delay1(10); /延时一会待数据传完en=0; /数据传完再将其置0/液晶初始化子程序void init() p3_7=0; /让其置0时,s9、s13、s17、s21相当于独立按键 P0=0; /P0初始化为0dula=0; /防止将数据传到数码管wela=0;rw=0; /程序牵涉写操作没有读操作,直接置0write_com(0x38); /设置16*2显示模式delay1(20); /传完命令适当延时一会write_com(0x0c); /设置开显示、不显示光标delay1(20) ;write_com(0x06); /当读或写一个字符后地址指针加1,且光标加1delay1(20);/write_com(0x01); /显示清屏 去掉这条指令后屏幕就不会出现闪烁现象delay1(20);/显示子程序void display() uchar a,b,c; init(); write_com(0x80+5);/选择数据地址指针 delay1(20); for(a=0;a8;a+)/一共要显示8位,所以写八次 write_date(table1table2a); /在第一行显示时钟 write_com(0x80+0x40+3); delay1(20); for(b=0;b12;b+)/一共要显示12位,所以写12次 write_date(table3b); /在第二行显示clock-12hour void process() /时、分、秒处理子程序table27=miao%10;table26=miao/10; table24=fen%10;table23=fen/10;table21=shi%10;table20=shi/10;/定时器中断函数,定时50ms,每隔1秒,miao+; void timer0() interrupt 1 using 1 count+;/每50ms,count就+1if(count=20)/当count=20时即计数到1s的时候执行if大括号内的语句 count=0; miao+; if(miao=60) miao=0;/当到60秒的时候,分+1 ,同时秒从0重新开始计时 fen+; if(fen=60) fen=0;/当到60分的时候,时+1 ,同时分从0重新开始计时 shi+; if(shi=12) shi=0;/当到12小时的时候,时从0重新开始计 TH0 = 0x3c; /到了50ms后重新装入初值 TL0 = 0xb0;void key() /按键判断子程序if(s2=0) /判断s2是否按下键盘 delay2(100); /延时,软件消抖 if(s2=0) /确认按键按下 fen+; /分加1 if(fen=60)/加到60时返回0继续加 fen=0; while(s2=0); / 等待按键放开.即每按一次只加1 if(s3=0) /判断s3是否按下键盘 delay2(100); /延时,软件消抖 if(s3=0) /确认按键按下 fen-; /分减1 if(fen=-1)/减到0时返回60继续减 fen=60; while(s3=0); / 等待按键放开.即每按一次只加1if(s4=0) /判断s4是否按下键盘 delay2(100); /延时,软件消抖 if(s4=0) /确认按键按下 shi+; /时加1 if(shi=12)/加到12时返回0继续加 shi=0; while(s4=0); / 等待按键放开.即每按一次只加1if(s5=0) /判断s2是否按下键盘 delay2(100); /延时,软件消抖 if(s5=0) /确认按键按下 shi-; /时减1 if(shi=-1) /减到0时返回12继续减 shi=12; while(s5=0); / 等待按键放开.即每按一次只加1 void read()/从AT24C02中将原来写入的数读取出来读取 init1(); / I2C总线 miao=read_add(23); /读秒 delay4(100); fen=read_add(24); /读分 delay4(100); shi=read_add(25); /读时 delay4(100);void write() /将数据写入板上AT24C02内部 write_add(23,miao); /保存秒 delay4(100); write_add(24,fen); /保存分 delay4(100); write_add(25,shi); /保存时 delay4(100);/主函数void m

温馨提示

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

最新文档

评论

0/150

提交评论