ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:235.75KB ,
资源ID:12651073      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12651073.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机数字钟设计报告.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机数字钟设计报告.docx

1、单片机数字钟设计报告中国矿业大学2011年电子设计竞赛作品设计总结报告作 品 名 称:多功能数字钟参赛队员:联系电话:摘要:本多功能数字钟采用ATMEL公司的AT89S52单片机作为核心器件,实现对整个系统的自动控制。采用DALLAS公司的DS1302实时时钟芯片作为时间信号源,实现年、月、日、时、分、秒、星期的自动计时,同时利用其内部31字节的SRAM静态寄存器,实现闹钟数据和生日提醒数据的掉电保存。采用DALLAS公司的DS18B20单总线数字温度传感器采集环境温度数据,温度转换精度可达0.0625度。显示器件采用LCD1602液晶显示屏,该显示屏单屏可显示32个字符,所有的时间及温度数据

2、均可在一屏中显示。关键字:单片机 数字钟 AT89S52 DS1302 DS18B20 LCD1602多功能数字钟设计报告一、总体要求1、基本要求:(1)可实现基本时钟功能,十进制显示小时、分和秒位。(2)可调时,可预置时间。(3)倒计时功能。(4)可定时。定时时间到发出提示(提示为声音或光等均可)。2、扩展功能:(1)时钟12小时制和24小时制之间可调节自由转换。(2)实现秒表计时功能。(3)时钟芯片的精确计时。. 二、整体介绍:本作品整体如上图,由主板,电池两部分组成。采用双路供电,电池、交流任选。交流输入不分极性,板载整流全桥,自动调整电源极性。直流输入连接6-24伏任意直流电源,有连接

3、座方便连接。时钟部分不须外界电源保持,自带后备电池,维持时钟运行。当系统整体工作时,时钟部分自动对后备电源涓流充电,保持电源容量。键盘输入部分采用矩阵键盘,预留4个空白键位,为以后系统功能拓展,对按键需求增加时准备。带有3组闹钟,断电自动保护,重新上电后闹钟不丢失。定时精度为分钟。闹钟到时会有蜂鸣器鸣响,约一分钟后自动停闹。还带有一路生日提醒,到达日期后也会有蜂鸣器鸣响。板载的实时温度测量探头可以实时测量环境温度,显示精度代0.1度,同时有上下限超温报警功能。一旦温度超过报警上限或低于报警下限,就会报警。上下限温度可自行设定。测温范围0度到99度三、操作说明主板上的显示部分液晶显示器显示的内容

4、自左向右分别是:第一行:年、月、日、星期第二行:时、分、秒,实时温度2*2矩阵键盘的左侧两列共4个按键,4个按键自上而下依次定义为:第一列:模式切换、保存闹钟、修改时间确认、闹钟换组第二列:光标左移、数字加一、数字减一、光标右移液晶显示器下方的白色按键是电源切换开关,弹起为交流供电,按下为直流供电。下面按模式介绍使用方法。(注:因为上电自动进入模式2正常显示模式,所以实际使用中模式显示的顺序与本说明不同)1、模式0:闹钟调整模式按动模式切换键至液晶屏左上角显示“alarm”,设置第一组闹钟。用光标移动键配合数字加减键设定闹钟,设定好后按保存闹钟键保存闹钟,此时液晶屏上显示“SaveAlarm”

5、,片刻后返回设置界面。按动闹钟换组键切换至下一组闹钟,按同样的步骤设置。切换时,屏幕上显示“ChangeTeam”,片刻后返回设置界面。3组闹钟可以循环切换。闹钟断电后可保存不丢失。注意:每设完一组闹钟后都需要保存,切换闹钟后上一组闹钟的数据会被覆盖。同时退出闹钟设置模式会将缓冲区内的闹钟数据全部清空。2、模式1:时间调整模式按动模式切换键至液晶屏右上角显示“adjust”,设置时间。用光标移动键配合数字加减键设定时间、日期,设定完成后,必须按修改时间确认键,确认并保存修改后的时间,否则,修改的时间数据不会被更新到时钟芯片中。3、模式2:正常显示模式上电默认进入的模式,正常显示时间、日期、温度

6、等数据4、模式4:上下限报警温度设置模式按动模式切换键至液晶屏左边显示“max_temp、min_temp”,各自对应着上限报警温度和下限报警温度。用光标移动键配合数字加减键设定,自动保存,设置完成后可直接退出。注:上下限报警温度掉电不保存。5、模式5:生日提醒模式按动模式切换键至液晶屏左上角显示“birthday”,设置生日提醒。操作同闹钟设置。生日提醒数据断电不丢失。五,功能测试1、设定好三组闹钟(时间间隔3分钟以上),分别到时后蜂鸣器报警,约一分钟后自动停止。2、用手捏住温度传感器,显示温度值上升,超过温度报警上限后蜂鸣器报警,松手后显示温度下降,低于温度报警上限后,蜂鸣器自动停止。3、

7、设定好时间、闹钟、生日提醒等数据后,切断外部电源供给(取下电池,切断220V电源),3小时后恢复供电,检查所有数据依然正确,时钟在断电期间依然在走动。七、未来功能扩展1、 画面风格显示功能选择。2、 增加EEPROM存储器,使闹钟的组数增多,保存时间不再受备份电源的限制。3、 增加无线数据传输功能,可对其他多部同型号数字钟同步统一时间、闹钟、生日提醒、温度报警设定等设定。附录一:总体电原理图附录二:程序清单#include#include #define uchar unsigned char#define uint unsigned intsbit lcd_rs=P27;sbit lcd_r

8、w=P26;sbit lcd_enable=P25;sbit sck=P21;sbit io=P22;sbit rst=P23;sbit DQ=P20;sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit beep=P24;uchar time_data7=12,7,4,17,11,58,30;uchar write_add7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80; /对时时向里面写的地址uchar read_add7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81; /读

9、时间时向里面写的地址uchar disp14;uchar t_data7=12,7,4,17,11,58,30; /*sbit lcd_rs=P34;sbit lcd_rw=P35;sbit lcd_enable=P36;sbit sck=P24;sbit io=P25;sbit rst=P26;sbit DQ=P27;*/*/*void write_ds1302_byte(uchar dat);void write_ds1302(uchar add,uchar dat);uchar read_ds1302(uchar add);void set_rtc();void read_rtc();v

10、oid time_pros();void change_day(uchar com); /星期转换void lcd_1302_display();/*/*/延时函数,在12MHz的晶振频率下/大约50us的延时/*void delay_50us(uint t);/*/延时函数,在12MHz的晶振频率下/大约50ms的延时/*void delay_50ms(uint t);/*/*void lcd_delay(uint z);void lcd_com(uchar com); /写指令void lcd_dat(uchar dat); /写数据void lcd_inital(); /液晶初始化voi

11、d lcd_com_dat(uchar com,uchar dat);void lcd_com_string(uchar com,uchar dat);/*/*void init_ds18b20(void);void b1820_delay(uint t);void write_byte(uchar dat);uchar read_byte(void);uint readtemperature(void);void change_temperature();/*/*void key_change_time();/*/*void main() lcd_inital(); while(1) key

12、_change_time(); /时间调节 delay_50us(20); lcd_1302_display(); /时间显示 change_temperature(); /温度显示 /*/*void delay_50us(uint t) uchar j; for(;t0;t-) for(j=19;j0;j-);void delay_50ms(uint t) uint j; for(;t0;t-) for(j=6245;j0;j-);void lcd_com(uchar com) /写指令 lcd_rs=0; lcd_rw=0; P0=com; lcd_enable=1; lcd_delay(

13、1); lcd_enable=0; void lcd_dat(uchar dat) /写数据 lcd_rs=1; lcd_rw=0; P0=dat; lcd_enable=1; lcd_delay(1); lcd_enable=0;void lcd_inital() / 初始化程序 lcd_rs=0; lcd_rw=0; lcd_com(0x38); lcd_com(0x01); lcd_delay(5); lcd_com(0x0c); /不显示光标 void lcd_delay(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);

14、void lcd_com_dat(uchar com,uchar dat) /在液晶的某一位置写某个数 lcd_com(0x80+com); lcd_delay(5); if(dat=A&dat=a&dat=z) lcd_dat(dat); else lcd_dat(0x30+dat); void lcd_com_string(uchar com,uchar dat) /在某个位置写字符串 uchar a; lcd_com(0x80+com); lcd_delay(5); for(a=0;a3;a+) lcd_dat(data); lcd_delay(5); /*/*/1302实时时钟部分vo

15、id write_ds1302_byte(uchar dat) /用时钟写一个字节 uchar i; for(i=0;i1; sck=1; void write_ds1302(uchar add,uchar dat) /随机写入数据 rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); write_ds1302_byte(dat); rst=0; _nop_(); io=1; sck=1;uchar read_ds1302(uchar add) /随机读出一个数据 uchar i,value; rst=0

16、; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); for(i=0;i1; sck=0; if(io) value=value|0x80; sck=1; rst=0; _nop_(); sck=0; _nop_(); sck=1; io=1; return value;void set_rtc() /对1302进行对时 uchar time_data7=12,7,4,17,11,58,30; /年周月日时分秒 uchar i,j; for(i=0;i7;i+) j=time_datai/10; time_data

17、i=time_datai%10; time_datai=time_datai+j*16; write_ds1302(0x8e,0x00); /去除写保护 for(i=0;i7;i+) write_ds1302(write_addi,time_datai); write_ds1302(0x8e,0x80); /加写保护 void read_rtc(void) /读出当前时间 uchar i; for(i=0;i7;i+) time_datai=read_ds1302(read_addi); void time_pros(void) /显示时分秒 disp0=time_data6%16; /秒 d

18、isp1=time_data6/16; disp2=time_data5%16; /分 disp3=time_data5/16; disp4=time_data4%16; /时 disp5=time_data4/16; disp6=time_data3%16; /日 disp7=time_data3/16; disp8=time_data2%16; /月 disp9=time_data2/16; disp10=time_data1%16; /周 disp11=time_data1/16; disp12=time_data0%16; /年 disp13=time_data0/16;void ch

19、ange_day(uchar com) /写星期进去 switch(disp10) case 1: lcd_com_string(com,MON);break; case 2: lcd_com_string(com,TUE);break; case 3: lcd_com_string(com,WED);break; case 4: lcd_com_string(com,THU);break; case 5: lcd_com_string(com,FRI);break; case 6: lcd_com_string(com,SAT);break; case 7: lcd_com_string(c

20、om,SUN);break; void lcd_1302_display() rst=1; read_rtc(); /读时间 rst=0; time_pros(); /处理时间 lcd_com_dat(0x01+2,2); lcd_com_dat(0x02+2,0); lcd_com_dat(0x03+2,disp13); /年十位 lcd_com_dat(0x04+2,disp12); /年个位 lcd_com_dat(0x05+2,0x2d-0x30); lcd_com_dat(0x06+2,disp9); /月十位 lcd_com_dat(0x07+2,disp8); /月个位 lcd_

21、com_dat(0x08+2,0x2d-0x30); change_day(0x0d); /周 lcd_com_dat(0x09+2,disp7); /日十位 lcd_com_dat(0x0a+2,disp6); /日个位 lcd_com_dat(0x48,disp0); /秒个位 lcd_com_dat(0x47,disp1); /秒十位 lcd_com_dat(0x46,0x3a-0x30); lcd_com_dat(0x45,disp2); /分个位 lcd_com_dat(0x44,disp3); /分时位 lcd_com_dat(0x43,0x3a-0x30); lcd_com_da

22、t(0x42,disp4); /时个位 lcd_com_dat(0x41,disp5); /时十位 /*/*/温度部分void b1820_delay(uint t) while(t-); void init_ds18b20(void) /对ds18b20进行初始化 uchar n; DQ=1; b1820_delay(8); DQ=0; b1820_delay(80); DQ=1; b1820_delay(8); n=DQ; b1820_delay(4);void write_byte(uchar dat) /对ds18b20写一个字节 uchar i; for(i=0;i=1; b1820

23、_delay(4);uchar read_byte(void) /对ds18b20读一个字节 uchar i,value; for(i=0;i=1; DQ=1; if(DQ) value|=0x80; b1820_delay(4); return value;uint readtemperature(void) /返回的一个16位的数 uint a,c,b; init_ds18b20(); write_byte(0xcc); /跳过ROM write_byte(0x44); /启动温度测量 b1820_delay(300); init_ds18b20(); write_byte(0xcc);

24、write_byte(0xbe); a=read_byte(); /读低8位 b=read_byte(); /读第二个8位 c=b*256+a; return c;void change_temperature() uint temp; uchar tp; temp=readtemperature()3; /readtemperature()/256; tp=temp&0x01; if(tp=1) /显示小数 lcd_com_dat(0x4d,5); else lcd_com_dat(0x4d,0); temp=readtemperature()4; /显示整数部分 lcd_com_dat(0x4a,temp/10%10); lcd_com_dat(0x4b,temp%10); lcd_com_dat(0x4c,0x2e-0x30); lcd_com_dat(0x4e,0xdf-0x30); lcd_com_dat(0x4f,C);/*/*void key_chan

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1