统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被
图5 单片机系统冻结,单片机一切工作停止,直到下一个中断或硬件复位为
止。最高运作频率35MHz,6T/12T可选。 5. 数码管显示电路
将所有数码管的8个显示段码\的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,电路如下图:
图6 数码管显示电路
四、软件设计
本系统的软件系统主要可分为主程序、定时计数中断程序、按键程序、延时程序四大模块。 设计思路:
本系统主要可分为主程序、定时计数中断程序、按键程序、延时程序和共阴极数码管显示程序。定时中断程序是利用单片机内部定时器0实现1秒的定时,然后利用软件延时实现分小时,时间调整程序是利用单片机的内部存贮器,把调整好的时间写到显示时间的存贮单元,然后启动定时器开始计时并显示,延时程
序是利用软件实现延时达到去抖的目的和数码管动态显示的延时。主程序就是利用这些子程序中断程序实现显示、定时等功能。
1.软件流程图
(1)主程序
(2)键盘扫描程序
开始 初始化 键盘扫描 显示 开始 计时满1s 秒加1 满60s 秒清零,分加1 分满60 分清零,时加1
(3)显示程序
时间数据个十位分离 开始
送段选码 送位选码 i>8 ? i=0
2、程序清单
#include
#define uint unsigned int #define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
结束 消隐
sbit k0=P1^0; sbit k1=P1^1; sbit k2=P1^2;
int s0,s1,min0,min1,h0,h1,shi,fen,miao,count,slnum,a0,a1,b0,b1,c0,c1; void delay(uint z) //延时函数1ms {
uintx,y;
for(x=z;x>0;x--) for(y=90;y>0;y--); }
void init() //初始化函数 {
P0=table[0]; P2=0xff; shi=23;
fen=59; //上电时间23-59-50 miao=50;
s1=miao/10; s0=miao; min1=fen/10; min0=fen; h1=shi/10; h0=shi; //分离出个位十位 TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; //基准时间为20ms EA=1; ET0=1; TR0=1; //打开中断定时器 }
void display0() // {
P2=0x80; P0=table[h1]; delay(1);
P0=0x00; //消隐 P2=0x40; P0=table[h0]; delay(1);
P0=0x00; P2=0x20; P0=0x40; delay(1);
P0=0x00;
P2=0x10;
P0=table[min1]; delay(1);
P0=0x00; P2=0x08;
P0=table[min0]; delay(1);
P0=0x00; P2=0x04; P0=0x40; delay(1);
P0=0x00; P2=0x02; P0=table[s1]; delay(1);
P0=0x00; P2=0x01; P0=table[s0]; delay(1);
P0=0x00; }
void display2() {
P2=0x80; P0=table[a1]; delay(1);
P0=0x00; P2=0x40; P0=table[a0]; delay(1);
P0=0x00; P2=0x20; P0=0x40; delay(1);
P0=0x00; P2=0x10; P0=table[b1]; delay(1);
P0=0x00; P2=0x08; P0=table[b0]; delay(1);
P0=0x00; P2=0x04;
//让时分秒中间显示“—”
该显示函数是让闪烁显示函数的子函数