班级: 2010级电子信息工程二班
姓名: 谢党。
学号: 2010550528
指导教师: 朱江。
2023年 4月 8 日。
目录。一、设计要求2
(一)基本要求2
(二)自行扩展部分2
二、硬件设计2
(一)单片机芯片2
(二)总设计原理框图3
(三)各模块设计3
(四)整体设计原理图6
3、软件设计流程图7
(一)主程序模块7
(二)数码显示模块7
(三)中断程序模块8
(四)键盘扫描程序模块9
4、程序清单及解释10
5、最后焊好的实物图14
6、设计总结15
一、设计要求。
(一)、基本要求:
自制一个单片机最小系统,包括串口**、复位电路,采用内部定时器计时,设计一个具有秒、分、时的数字时钟,采用四位一体数码管显示相关信息。
二)、自行扩展部分:
设置两个按键用来调时钟的时、分。另外再设置一个闹钟,以及用来设置闹钟的按键。
二、硬件设计。
一)、单片机芯片:
本次设计选用stc公司的stc89c54rd+增强型51单片机(当然也可以用其它型号的51芯片,但是实验室目前的型号只有这种)。stc89c54rd+单片机具有提高mcu的运行速度,运行稳定,**便宜,良好的性价比等特点.其支持的最高时钟为80m,具有isp**系统编程功能,大大缩短开发复杂度,同时可节省购买编程器的额外投人;stc89c54rd+单片机内部包括16kb的flash程序存储器rom、lkb的数据存储器ram,与普通的8051单片机完全兼容,而51单片机的开发环境也很成熟:如keil c语言被广泛地应用于新产品的开发,这对于缩短系统开发周期有着很重要的意义。
(二)、总设计原理框图:
(三)、各模块设计:
1、上电按钮复位电路。
本设计采用上电按钮复位电路:首先经过上电复位,当按下按键时,rst直接与vcc相连,为高电平形成复位,同时电解电容被电路放电;按键松开时,vcc对电容充电,充电电流在电阻上,rst依然为高电平,仍然是复位,充电完成后,电容相当于开路,rst为低电平,单片机芯片正常工作。其中电阻r1决定了电容充电的时间,r1越大则充电时间长,复位信号从vcc回落到0v的时间也长。
2、晶振电路。
本设计晶振电路采用12m的晶振。晶振的作用是给单片机正常工作提供稳定的时钟信号。单片机的晶振并不是只能用12m,只要不超过20m就行,在准许的范围内,晶振越大,单片机运行越快,还有用12m的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12m的话,一个时钟周期为12us,那么定时器计一次数就是1us了,电容范围在20-40pf之间,这里连接的是20pf的电容。
机器周期=10*晶振周期=12*系统时钟周期。
3、数码显示电路
就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。因此,本时钟采用数码管显示方式。
数码管作为一种主动显示器件,具有亮度高、**便宜等优点,而且市场上也有专门的时钟显示组合数码管。
对于实时时钟而言,显示显然是另一个重要的环节。通常led显示有两种方式:动态显示和静态显示。
静态显示的优点是程序简单、显示亮度***、单片机cpu的开销小,节约cpu的工作时间。但占有i/o口线多,每一个led都要占有一个i/o口,硬件开销大,电路复杂。需要几个led就必须占有几个并行口,比较适用于led数量较少的场合。
当然当led数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。
led动态显示硬件连接简单,但动态扫描的显示方式需要占有cpu较多的时间,在单片机没有太多实时测控任务的情况下可以采用。
本系统需要采用两片四位一体led数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。
6、时钟、闹钟设置电路。
本设计利用按键开关来设置时钟显示的数字及闹钟设置。当按钮按下时,将在相应的端口输入一个低电平,通过相应的程序来改变时钟显示。
k1用来调‘时’,每按一下数字加一。
k2用来调‘分’,每按一下数字加一。
k3用来设闹钟的时分,当其按下时(p3.6=0),k1、k2用来调闹钟时间,当它没按下时(p3.6=1),k1、k2用来调时钟时间。
k4用来开关闹钟,当其按下时(p3.7=0),闹钟打开;当其没按下时(p3.7=1),闹钟关闭。
7、闹钟电路。
由于实验器材原因,本设计用发光二极管代替闹铃。当闹铃响时,二极管发光。
(四)、整体设计原理图:
三、软件设计流程图。
(一)、主程序模块:
主程序流程图。
(二)、数码显示模块:
(三)、中断程序模块:
循环次数加1
否。满20次?
是。秒单元加1
否。60s到?
是。秒单元清0,分单元加1
否。60分到?
是。分单元清0,时单元加1
否。24小时到?
是。时单元清0
返回。中断程序流程图。
(四)、键盘扫描程序模块:否。是。
是。否。是。否。
是。否。是。否。
是。否。否。是。
4、程序清单及解释。
#include<>
unsigned
chartab=
|0~9的段字段。
#define uchar unsigned char
#define uint unsigned int
uchar int_time,second,minute,hour;lshi,lfen;
|时钟的时分秒和闹钟的时分
sbit k1=p3^4; |设置时。
sbit k2=p3^5;||设置分。
sbit k3=p3^6;||设置闹钟的时分开关。
sbit k4=p3^7;||设置闹钟的开关。
sbit lao=p3^0;||闹钟的响铃。
void delay(uint z) |延时函数。
uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--)
void displayhourminutesecond(uchar h,m,s) |时钟的显示函数。
p2=0xfe; p1=tab[h/10];delay(1);|显示时的十位数。
p2=0xfd; p1=tab[h%10];delay(1);|显示时的个位数。
p2=0xf7; p1=tab[m/10];delay(1);|显示分的十位数。
p2=0xef; p1=tab[m%10];delay(1);|显示分的个位数。
p2=0xbf; p1=tab[s/10];delay(1);|显示秒的十位数。
p2=0x7f; p1=tab[s%10];delay(1);|显示秒的个位数。
void displaylao(uchar h,m) |闹钟的显示函数。
p2=0xfe; p1=tab[h/10];delay(1);|显示时的十位数。
p2=0xfd; p1=tab[h%10];delay(1);|显示时的个位数。
p2=0xf7; p1=tab[m/10];delay(1);|显示分的十位数。
p2=0xef; p1=tab[m%10];delay(1);|显示分的个位数。
void keyscan() 键盘扫描函数。
p3=p3|0xfe;
delay(1);
while(k3==0)
if(k2==0)
delay(1);
if(k2==0)
if(k1==0)
delay(1);
if(k1==0)
tr0=0;
displayhourminutesecond(hour,minute,second); delay(1);
单片机课程设计
可变程序控制器是集微机技术 自动化技术 通讯技术于一体的通用工业控制装置。它可靠性强 性能 比高 使用方便,已在工业控制的各个领域里得到了极为广泛的应用,成为实现工业自动化的一种强有力的工具 1 plc的定义有许多种。国际电工委员会 iec 对plc的定义是 可编程控制器是一种数字运算操作的电子系统...
单片机课程设计
目录。内容提要2 关键词2引言3 一 硬件电路设计3 一 电路板原理3 二 电路元器件3 二 软件设计3 一 秒钟设计方案3 二 时钟设计方案4 结语7单片机时钟设计。内容摘要 一 在实验板上用动态扫描显示00 59秒钟,具体要求如下 一 6m晶振 二 l9 l10显示00 59十进制数并循环,间隔...
单片机课程设计
1 选题背景。1.1 家庭智能防盗报警系统设计的背景及目的。随着经济的发展,人们对防盗 防劫 防火保安设备的需求量大大增加。针对偷盗 抢劫 火灾 煤气泄漏等事故进行检测和报警的系统,其需求也越来越高。家居智能是以家为平台,兼备建筑 自动化,智能化于一体的高效 舒适 安全 便利的家居环境。自动化的家居...