C语言编写单片机万年历系统课程设计报告98分
时间:2023-10-10 17:37:00
《C会员分享语言编写单片机万年历系统课程设计报告98分,可在线阅读,更多相关信息《C请在人文库网上搜索语言编写单片机万年历系统课程设计报告98分(30页收藏版)。
1.多功能计算机时钟设计报告1。培训目的的意义和任务要求1.1 目的单片机已广泛应用于智能仪器、实时工控、通信设备、导电等领域 航空系统、家用电器等。 学好单片机,工作就不成问题了。 老师说,可见学好单。 影片意义重大。单片机作为一门基础学科,不仅是C语言早期学习的综合应用,也是C语言早期学习的综合应用 它是理论与实践相结合的主要体现。计算机时钟的有效检查是正确的 DS1302寸钟芯片, STC89C单片机中断,独立键盘,数字管,蜂鸣器,LED同时,丁的控制提高了学习水平 生工程系统设计能力。LED日历钟数字显示清晰直观,行走准确,可以进入 行夜视, 它还可以扩展各种功能。 因此,电子万年历无论是作为比赛题目还是作为比赛题目 练习。
题目都很有价值。通过单片机系统的综合培训,学生不仅要了解 它还增强了学生的学科热情。2.2 要求设计的计算机时钟完成以下功能:1. 基本功能 实时显示当前时间 ( 四位数码管显示, 2位显示小时, 两位显示分钟, 第 2位小数点 0.5 秒亮, 0.5 秒灭)。 显示年和月日可以用一个按钮依次切换。 能修改当前时钟。 具有秒表功能,显示秒和百分秒。2. 扩展功能单片机和 PC 机器通信(可选)可设置初始值倒计时功能(可选)闹钟和报时功能(可选)。显示周(可选)。二、实训方案2.1 根据系统功能要求,系统分析可分为四个部分:DS读数据写数据模块,数码1302寸钟芯片。
管显示模块,按键设置调节时间模块,秒表功能模块,硬件 电路接线图如本系统采用电路接线图DS1302时钟芯片,四位数字管显示日星期, 时间,秒和百分秒。其中,年月日、时分秒、周使用DS1302数据显示,秒 单片机定期中断表。该系统共用四个键,均为独立对地键,分为四个键 不要用于显示切换、修改切换、修改加一、修改减一、秒表启动暂停和数据清零。选择22个设备STC89C5芯片,频率为11.0592MHz由于系统要求显示年月月小时和 分钟,四位LED显示数字管;按钮用于设置时间或闹钟时间或启动秒 设置三个按钮:显示切换模式键(key3)、修改数据键(key0)、。
4、加 一键(keyl)、减一键(key2)。DS1302时钟芯片。常见的LED显示具有清晰明亮的特点。显示接口也是绝大多数单片机应用 系统的必备部件之一。由发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。它由 若干发光二极管按一定规律排列。当发光二极管导通时,相应的 点点或一笔画被点亮,控制不同组合的二极管导通,可以显示各种字符。1.显示器结构常用的7段显示器结构如图所示,发光二极管的阳极称为共阳 极显示器,阴极连接成共阴显示器。一位显示器由8个发光二极管组成, 七个发光二极管ag控制7个笔画的亮度或暗度,控制一个小数点的亮度和暗度 暗,这种笔。
5.画的七段显示器能显示的字符较少,字符形状有些失真,但失控简单 单,使用方便。4 u Q O O O a b c d c f a 共阴二、系统硬件设计3.单片机最小系统单片机功能系统图见附录1。单片机最小系统由STC89C单片机,复位电 由路、晶振电路组成。如图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)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)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;disply();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(。