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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

lCD时钟日历设计报告Word下载.docx

1、另外它们在价格上差距很大,考虑成本我们首选162。所以选择方案2。2.4 报警系统的方案比较用单片机板上长鸣的蜂鸣器实现定时闹钟功能。用喇叭加语音芯片实现定时闹钟功能。 用喇叭加语音芯片成本很高,但声音还不错,再有喇叭体积庞大。用用单片机板上蜂鸣器,节约了成本和设计的时间。限于设计所需要的功能,用蜂鸣器是最佳选择。所以我们采用方案1.2.5 键盘控制方案选择采用矩阵键盘,采用矩阵形式连接。采用单片机实验板上固有的按键作为校时调整控制。虽然矩阵键盘调整简单快速,考虑到程序设计的便捷但我们觉得还是用方案2。二、硬件系统方框图 三、硬件电路设计 硬件系统设计电路图如(a)所示,单片机的P1口为LCD

2、液晶显示的引脚接口。单片机的P20P3、P33引脚作为按键接口,其中P20为设置闹钟项选择键,P21为调整时间项选择键,P22为调整时间或设置闹钟加1键,P23为调整时间或设置闹钟减1键,P33为闹钟停止键。Reset为复位键,P1-0为蜂鸣器接口,高电平驱动蜂鸣器鸣叫,模拟闹钟起闹。 LCD 162的相关说明( LCD液晶显示的资料介绍和外观图形,)四、软件系统程序设计流程图(自己参考书本P245P251及参考资料)五、调试结果分析及使用操作说明 1) 软件调试 软件调试,我是在keil软件平台和单片机学习板上来完成的。当我写部分程序在keil软件经过调试,开始出现很多错误和警告。通过逐个错

3、误排错及修改。得出下列经验,(1)调用函数最好在头文件中进行申明,主函数写在最后;(2)特别注意一些字母的大小写,一般要用英语文字写,不要用中文汉写,这是最不容易检查的,如我在检查液晶显示程序时,时钟没检查到错误,最后我删掉此行重新写,错误排除了,据我分析可能是中英文变换时出现问题。 经过一系列排错,最后文件没有错误但还有警告。由于c语言中有警告是没关系的,我将HEX文件下在到单片机竟显示一些乱码。我有回到文件,经过对警告的分析及上网查阅。将程序稍微修改警告慢慢被排除,最后没有错误和警告了,下载到单片机,发现乱码竟然还出现,还有多个界面叠加显示,里面还有一些乱码。经过分析,叠屏现象是没有对液晶

4、清平所致。于是我又在不同界面程序前加入调用填充空格函数,然后又下载,结果与前面一样。经过几个小时后,无意间我去掉 调用函数前void,结果叠屏现象解决。还有在定时计数时出现了计数不准确,通过修改定时器部分程序,问题也得到了解决。还另外在闹钟部分不能起闹,原因是由于LCD液晶函数部分和闹铃比较函数出现了小问题,经过不断调试才得已解决。 调试正确后,第一行显示年月日星期和_,第二行显示时分秒和Tu Nian ,并且能正常行走,按下相应键能实现相应的功能。2)使用操作说明程序修改编译无误后,将HEX文件下在到单片机,按下单片机电源开关键,刚开始如出现乱码,按一下复位键,LCD液晶显示屏正常显示。当按

5、下P20键时,设置闹钟功能,第一次调整时,第二次调整分,第三次调整秒,调整完3秒后恢复正常模式,闹铃设鸣叫5s;当按下P21键时,对应调整项闪烁,定时器停止计数,开始对日历和时间调整,前三次为年月日星期调整,后三次为时分秒调整;当按下P22键时,设置日历时间或闹钟加1,加1调整完3秒后恢复正常行走;当按下P23键时,设置日历时间或闹钟减1,减1调整完3秒后恢复正常行走;当按下P33键时,可对闹钟终止鸣叫。源程序:#include #include#define uchar unsigned char#define uint unsigned int /#define LCD_EN_PORT P

6、1/#define LCD_RS_PORT P1#define LCD_DATA_PORT P1#define LCD_EN P1_3#define LCD_RS P1_2/*函数声明*/void LCD_write_char (unsigned char Data,unsigned char command);/写命令或写数据函数void LCD_init (void);/液晶初始化函数void LCD_en_write (void);/液晶使能函数void LCD_write_char (uchar command,uchar Data);void LCD_set_xy (uchar x,

7、 uchar y); /设置显示位置函数void LCD_write_string (uchar X,uchar Y,uchar *s);/写字符串函数void delay_nus (uint n);/延时函数void delay_nms (uint n); /延时函数void Set_Time(uchar sel,uchar sel_1);void set_alarm(uchar sel,uchar sel_1);extern void delay_nms(unsigned int n);uchar Data113=0,0,0,0,0,0,0,0,0,0,0,0,0;uchar Data21

8、3=0,0,0,0,0,0,0,0,0,0,0,0,0; uchar Data39=0,0,0,0,0,0,0,0,0;uint run_nian();/判断是否为闰年 unsigned char tab=;unsigned char tab0=uint count=0;uchar count1=0;uint count2=0;uchar h,msec;uchar SJ=0;/调整时间选择 uchar NZ=0;/ 设置闹钟选项 uint nian=2011; /年初始值uchar yue=4,ri=8,xq=5,hour=0,min=0,sec=0;/月、日。时。分。秒初始值uchar al

9、arm_hour=0,alarm_min=0,alarm_sec=0; /闹钟时。bit clear_flag=0; /液晶清除屏幕标志bit Flicker; /调整时间及设置闹钟位闪烁标志bit alarm_flag=0; /闹钟起闹标志bit flag=0; /显示屏幕切换标志bit start_alarm_flag=0;/sbit key_alarm=P20;/设置闹钟项选择键sbit key_moda=P21; /调整时间项选择键sbit key_up=P22; /调整时间或设置闹钟加1键sbit key_Down=P23; /调整时间或设置闹钟减1键sbit alarm_stop=

10、P33;/闹钟停止键/*液晶初始化函数*/void LCD_init(void) delay_nms(5); LCD_write_char(0x28,0); /4位显示 LCD_write_char(0x0c,0); /显示开 LCD_write_char(0x06,0); LCD_write_char(0x01,0); /清屏/*液晶使能函数*/void LCD_en_write(void) LCD_EN=0; delay_nus(2); LCD_EN=1; LCD_EN=0;/*写命令或写数据函数*/void LCD_write_data(unsigned char Data_comman

11、d) unsigned char temp; temp=Data_command; LCD_DATA_PORT&=0X0f; /LCD_DATA_PORT=LCD_DATA_PORT&0X0f LCD_DATA_PORT|=temp&0xf0; /写高四位 LCD_en_write(); temp=temp4;=0x0f; /写低四位/*写命令和写数据函数*/参数:command=1,写数据,command=0写命令void LCD_write_char(unsigned char Data_or_command,unsigned char command) if(command=0) LCD

12、_RS=0; /RS=0,选择指令寄存器 LCD_write_data(Data_or_command); else LCD_RS=1; /RS=1,选择数据寄存器/*设置显示地址函数*/ void LCD_set_xy( unsigned char x, unsigned char y ) unsigned char address; if (y = 0) address = 0x80 + x; else address = 0xc0 + x; LCD_write_char( address, 0 );/*写字符串函数*/X为显示在第几列,Y为显示在第几行,s为待显示字符串void LCD_

13、write_string(unsigned char X,unsigned char Y,unsigned char *s) LCD_set_xy( X, Y ); /写地址 while (*s) / 写显示字符 LCD_write_char(*s,1); s +;/*延时函数*/系统时钟:12MHZvoid delay_nus( uint n) /N us延时函数 unsigned int i=0; for (i=0;i7) xq=1; if (yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) if ( ri31) ri=1;yue+; /大月31天

14、if (yue=4|yue=6|yue=9|yue=11) if (ri30) ri=1; /小月30天 if (yue=2) if( run_nian() /闰年的条件 if (ri29) ri=1; /闰年2月为29天28) ri=1; /平年2月为28天 if (yue12) yue=1;nian+; if (nian2100) nian=0; /if (xq=7) xq=1;/*年、月、日转换程序*/作用:处理显示数据年、月、日void RiQi_process(uchar *p1) p10=(uchar)(nian/1000)+0x30; p11=(uchar)(nian%1000/

15、100)+0x30; if(SJ=1&Flicker=1) p12= p13= p12=(uchar)(nian%1000%100/10)+0x30; p13=(uchar)(nian%1000%100%10)+0x30; p14=- if(SJ=2& p15= p16= p15=yue/10+0x30; p16=yue%10+0x30; p17= if(SJ=3& p18= p19= p18=ri/10+0x30; p19=ri%10+0x30; p110= p111= p112= /p111=xq/10+0x30; p111=xq%10+0x30;0 /结束标示/*时、分、秒转换程序*/处

16、理显示数据时、分、秒 void ShiJian_process(uchar *p2) if(SJ=4& p20= p21= p20=hour/10+0x30; p21=hour%10+0x30; p22=: if(SJ=5& p23= p24= p23=min/10+0x30; p24=min%10+0x30; p25= if(SJ=6& p26= p27= p26=sec/10+0x30; p27=sec%10+0x30; p28= /结束标示/*闹钟处理子程序*/处理设置闹钟时的显示数据时、分、秒void NaoZhong_process(uchar *p3)if(NZ=1& p30= p

17、31= p30=alarm_hour/10+0x30; p31=alarm_hour%10+0x30; p32= if(NZ=2& p33= p34= p33=alarm_min/10+0x30; p34=alarm_min%10+0x30; p35= if(NZ=3& p36= p37= p36=alarm_sec/10+0x30; p37=alarm_sec%10+0x30; p38=/*定时器1中断函数*/void timer_1(void) interrupt 3 /中断入口,闪烁 TH1=0x3C; /50ms定时 晶振12M TL1=0xB0; if(count1+=10) /50

18、0ms count1=0; Flicker=!Flicker; if(msec+=20) /1000ms msec=0; if(h+=3) /3秒后进入正常走时。 SJ=0;h=0;NZ=0;TR0=1;flag=0; if(start_alarm_flag=1) if(count2+=100) /5秒后闹钟停止 count2=0;alarm_flag=0;start_alarm_flag=0; /*按键扫描程序*/void key_scan()if(alarm_stop=0) /闹钟停止 delay_nms(10); if(alarm_stop=0) alarm_flag=0; start_alarm_flag=0; if(key_alarm=0) /设置闹钟 if(key_alarm=0) NZ+; flag=1; SJ=0; if(NZ3) NZ=0; flag=0; clear_flag=1; start_alarm_flag=1; whi

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2