200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 单片机c语言 课程设计报告 C语言编写单片机万年历系统课程设计报告98分

单片机c语言 课程设计报告 C语言编写单片机万年历系统课程设计报告98分

时间:2023-12-31 16:30:24

相关推荐

单片机c语言 课程设计报告 C语言编写单片机万年历系统课程设计报告98分

《C语言编写单片机万年历系统课程设计报告98分》由会员分享,可在线阅读,更多相关《C语言编写单片机万年历系统课程设计报告98分(30页珍藏版)》请在人人文库网上搜索。

1、多功能电脑时钟设计报告一、实训目的意义及任务要求1.1 目的意义单片机的使用领域已十分广泛,如智能仪器仪表、实时工控、通讯设备、导 航系统、家用电器等。 “学好单片机,工作就不成问题了。 ”老师说,可见学好单 片意义之重大。单片机作为一门基础学科,既是对前期学习C语言的综合运用,也 是理论与实践相结合的一大体现。电脑时钟有效地检验了对 DS1302寸钟芯片, STC89C5单片机中断,独立键盘,数码管,蜂鸣器,LED丁的控制,同时提高了学 生的工程系统设计能力。LED数字显示的日历钟显示清晰直观、走时准确、可以进 行夜视, 并且还可以扩展出多种功能。 所以,电子万年历无论作为比赛题目还是 练习。

2、题目都是很有价值。通过此次单片机系统综合训练,不仅要让学生认识了解 它,而且增强学生学科积极性。2.2 任务要求要求设计的电脑时钟完成以下功能:1. 基本功能 实时显示当前时间 ( 4位数码管显示, 2位显示小时, 2位显示分钟, 第 2位小数点 0.5 秒亮, 0.5 秒灭)。 能用一按键依次切换显示年及月日。 能修改当前时钟。 具有秒表功能,显示秒和百分秒。2. 扩展功能单片机与 PC 机的通讯(可选)可设定初值的倒计时功能(可选)闹钟及报时功能(可选)。显示星期(可选)。二、实训方案2.1 系统分析根据系统功能要求,可将系统组成结构分成四大部分:DS1302寸钟芯片读数据写数据模块,数码。

3、管显示模块,按键设置调节时间模块,秒表功能模块,。硬件 电路接线图如后图,本系统采用DS1302时钟芯片,四位数码管显示年月,日星期, 时分,以及秒和百分秒。其中年月日,时分秒和星期采用DS1302的数据显示,秒 表采用单片机定时中断实现。本系统共用到四个按键,且均为独立对地按键,分 别用于显示切换,修改切换,修改加一,修改减一,秒表启动暂停和数据清零。22器件选择选用STC89C5芯片,频率为11.0592MHz由于系统要求显示年月曰小时和 分钟,采用四位LED数码管显示即可;按键是用来设置时间或闹钟时间或启动秒 表等功能的,设置三个按键:显示切换模式键(key3)、修改数据键(key0)、。

4、加 一键(keyl)、减一键(key2)。DS1302时钟芯片。常见的LED显示具有清晰明亮的特点。是显示接口也是绝大多数单片机应用 系统必备的部件之一。发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。它由 若干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的 一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。1.显示器的结构常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳 极显示器,阴极连在一起的成为共阴显示器。1位显示器由8个发光二极管组成, 其中7个发光二极管ag控制7个笔画的亮或暗,另一个控制一个小数点的亮和 暗,这种笔。

5、画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简 单,使用方便。4 u Q O O O a b c d c f a 共阴二、系统硬件设计3.1单片机最小系统单片机功能系统图见附录1,。单片机最小系统由STC89C5单片机、复位电 路、晶振电路组成。如图3.1所示.:?1M1 j JM-H1I 詁 d I n- 3 4 -J Jc D 3 如KKW 薜KX* 兀吒:JillK 雀:#include #define uchar unsigned char #define uint unsigned int #define Write_Protect 0x8e / 写保护#define 。

6、OutPut P0 / 显示输出/sbit DU=P2A6;/sbit WE=P2A7;/sbit CE=P3A3;/sbit IO=P2A4;/sbit SCLK=P3A2; / sbit key=P3A4;/sbit key1=P3A5;/sbit key2=P3A6;/sbit key3=P3A7;/数码管段选数码管位选复位端口定义在 P0.2 引脚 数据输出端定义在 P0.4 引脚 时钟输出端口定义在 P0.3 引脚 时间调节控制键每按一次位加一每按一次位减一位选数据 0xef,0xdf,0xbf,0x7f显示切换uchar code Wei=0xfe,0xfd,0xfb,0xf7,0。

7、xfd;/ uchar code Duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /0-9 阴代码寄存器写地址寄存器读地址 设置初始时间 */code uchar Waddr=0x8c,0x88,0x86,0x84,0x82,0x80,0x8a; / code uchar Raddr=0x8d,0x89,0x87,0x85,0x83,0x81,0x8b; / uchar timeset=0x01,0x02,0x03,0x04,0x05,0x00,0x01; /* uchar time_buf7;/*存读到的时间 */uchar t。

8、ime_disp7;uchar dispdat5;/*存储显示值的 */uchar Btdis=0,k=0,z; bit btx,btx1,btx2,btx3,bt1,bt2,bt3; bit Btread; uint flag1;/*= 函数功能:延时 n 毫秒入口参数: n =*/ void Write1302(uchar dat);void delaynms(uchar n)uchar i,j;for(i=n;i0;i-) for(j=125;j0;j-);/*= 函数功能:根据命令字,向 1302 写一个字节数据 入口参数:Cmd存储命令字;dat,存储待写的数据=*/ void Ds。

9、1302_Write_Byte(unsigned char addr, unsigned char d) CE=0;_nop_();SCLK=0; _nop_();CE=1;_nop_();Write1302(addr); Write1302(d);CE=0; _nop_();IO=1;SCLK=1; /从DS1302读出一字节数据uchar Ds1302_Read_Byte(unsigned char addr) unsigned char i;unsigned char temp;CE=1;addr = addr | 0x01;for (i = 0; i 1;/ 输出数据: tempfor。

10、 (i = 0; i 1;if (IO) temp |= 0x80; else temp &= 0x7F; SCLK=1;SCLK=0;CE=O; / 停止 DS1302 总线return temp; /*=函数功能:向 1302 日历时钟芯片写入一个字节的数据 入口参数: dat=*/ void Write1302(uchar dat)uchar i;/SCLK=0;CE=1;for(i=0;i1;/*= 函数功能:根据命令字,从 1302 读取一个字节的数据入口参数: Cmd 返回参数: dat =*/ uchar Readset1302(uchar Cmd)uchar dat;CE=0;。

11、SCLK=0;CE=1;Write1302(Cmd);SCLK=1;CE=0;return dat;void bcdpro(void)unsigned char i,tmp;for(i=0;i0)time_disp0-;elsetime_disp0=99;elsebtx2=0; /*=k=2 时,调整月份, key1 为加 ,key2 为减 =*/ while(k=2)Btdis=1;display();zongshi();if(!key1)if(btx1=0)if(!key1)btx1=1;if(time_disp129)time_disp2=29;else if(time_disp228)。

12、time_disp2=28;else time_disp1=1;else btx1=0; if(!key2)if(btx2=0)if(!key2)btx2=1;if(time_disp11)time_disp1-;if(time_disp1=2) if(time_disp0%4=0)if(time_disp229) time_disp2=29;else if(time_disp228) time_disp2=28; else time_disp1=12; else btx2=0; /*=k=3 时,调整天, key1 为加 ,key2 为减 =*/ while(k=3)Btdis=2;disp。

13、lay(); zongshi();if(!key1)if(btx1=0)if(!key1)btx1=1;if(time_disp1=2)if(time_disp0%4=0) if(time_disp27)if(time_disp1%2=0)if(time_disp21) time_disp2-; else time_disp2=29; else if(time_disp21) time_disp2-; else time_disp2=28; else if(time_disp11) time_disp2-; else time_disp2=30; else if(time_disp1%2=1)。

14、if(time_disp21)time_disp2-;else time_disp2=31; else if(time_disp17) if(time_disp1%2=0) if(time_disp21)time_disp2-;else time_disp2=31; else if(time_disp1%2=1)if(time_disp21)time_disp2-;else time_disp2=30; else btx2=0; /*=k=4 时,调整星期, key1 为加 ,key2 为减 =*/ while(k=4)Btdis=2;display();zongshi();if(!key1)。

15、if(btx1=0)if(!key1)btx1=1;if(time_disp61) -time_disp6; else time_disp6=7; else btx2=0; /*=k=5 时,调整小时, key1 为加 ,key2 为减 =*/ while(k=5)Btdis=0;display();zongshi();if(!key1)if(btx1=0)if(!key1)btx1=1;if(time_disp30) time_disp3-; else time_disp3=23; else btx2=0; /*=k=6 时,调整分钟, key1 为加 ,key2 为减*/while(k=6。

16、)Btdis=0;display();zongshi();if(!key1)if(btx1=0)if(!key1)btx1=1;if(time_disp40)time_disp4-; else time_disp4=59; else btx2=0; /*= k=7 把调整后的数据转换成 16 进制写入 1302=*/ while(k=7)uchar i;for(i=0;i7;i+) timeseti=time_dispi; / 将调整后的时候写入 DS1302 bcdpro();for(i=0;i7;i+) Ds1302_Write_Byte(Waddri,time_bufi); Ds1302。

17、_Write_Byte(0x8e,0x80); / 打开写保护 k=0; else btx=0; /*= key3 为显示切换键,形成时分秒与年月日以及星期之前的切换 =*/ if(!key3) if(btx3=0) if(!key3) btx3=1;if(Btdis3) Btdis+; else Btdis=0; else btx3=0; /*= key3 为显示切换键,形成时分秒与年月日以及星期之前的切换 =*/ void tiaoshidisplay() if(z=15) z=0; switch(k) case 1:bt1=bt1;break; / 年 case 2:bt2=bt2;bt。

18、1=0;break;/月case 3:bt3=bt3;bt1=0;break;/日case 4:bt1=bt1;bt3=0;break;/周case 5:bt2=bt2;bt1=0;break;/时case 6:bt3=bt3;bt2=0;break;/分default:bt3=0;break; /*=函数名: 定时器 1 子程序=函数功能: 1S 读一次时间=返回参数:=*/ void Timer0() interrupt 1 using 1 uchar t;TH0=(65536-20000)/256; / 给定初值 TL0=(65536-20000)%256;flag1+; if(flag。

19、1=50)flag1=0;if(t49)t+;z+; tiaoshidisplay();else t=0;Btread=0;/* 函数名: 主函数 =函数功能: =返回参数: */ main() 给定初值TMOD=0x01; / 使用模式 1,16 位定时器TH0=(65536-20000)/256; /TL0=(65536-20000)%256;EA=1; / 总中断打开ET0=1; /定时器中断打开TR0=1; /定时器开关打开Ds1302_Init();Ds1302_Write_Time();while(1) keyscan();if(Btread=0) Btread=1;Ds1302_Read_Time();display(。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。