电路图很简单,数码管是用2片573 接到p2口,通过p0.0 和P0.1锁存控制,详见单片机开发板上面的电路:http://www.51hei.com/f/51hei-5.pdf , 大家可以按里面的图接,只需要端口要改为本程序中的即可.可通过按键实现设置定时的时间.小时分秒设置等等.
//包含头文件及宏定义//
#include
#include
#define uchar unsigned char
#define uint unsigned int
/
继电器响应动作指示灯//
sbit light=P1^0;
sbit int0_ok=P3^2;
sbit int1_ok=P3^3;
/数码管的段位锁存
sbit duan=P0^0;
sbit wei=P0^1;
uchar bit1,bit2,bit3,bit4,bit5,bit6;///小时 分钟 秒钟显示码
uchar fen=0;// 分钟缓存
uchar miao=0;//秒缓存
uchar shi=0;//小时缓存
uchar key_temp;/按键暂存
//uchar key_old;
uchar key_count;//按键计数
uchar key_back;/按键备份
uchar key_data;//按键数值
uchar key_con;
uchar key_ok;
uchar int0_function=0;///功能0,做调节始终
uchar int1_function=0;///功能1,做运行停止用
uchar time;定时常数
uchar t2time;
#define KEYDELAY 25 /*首键延迟次数*/
#define KEYLOOP 10 /*连续键间隔次数,需小于KEYDELAY*/
void shanshuo(uchar aa,uchar ii);
void init();
void sign(uchar i);
毫秒级的延时
void delayms(uint i) //误差 0us
{
uint c;
unsigned char a,b;
for(c=i;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
/数码管的段位码///
uchar code tableduan[]={ //共阳极数码管段码
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8, 0x80,0x90,//0-9
//0x88,0x83,0xc6,0xa1,0x86,0x8E//A-F
0xbf//-
};
uchar code tablewei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//位码
uchar code welcom[]={0xbf,0xbf,0xc0,0x8c,0x86,0xc8,0xbf,0xbf};//--OPEN-- 1
uchar code on[]={0xbf,0xbf,0xbf,0xc0,0xc8,0xbf,0xbf,0xbf};//---on--- 2
uchar code off[]={0xbf,0xbf,0xc0,0x8e,0x8e,0xbf,0xbf,0xbf};//--off--- 3
uchar code closed[]={0xbf,0xc6,0xc7,0xc0,0x92,0x86,0xf8,0xbf};//-closed- 4
/数码管显示程序///
void display(uchar duan1,uchar wei1)
{
P2=0xff;
duan=0;
wei=0;
P2=tableduan[duan1];
duan=1;
duan=0;
P2=tablewei[wei1];
wei=1;
wei=0;
delayms(1);
}
/数码管显示程序///
//数码管显示位计算/
void jisuan()
{
bit1=shi/10;
bit2=shi%10;
bit3=fen/10;
bit4=fen%10;
bit5=miao/10;
bit6=miao%10;
/*
display(bit1,0);
display(bit2,1);
display(10,2);
display(bit3,3);
display(bit4,4);
displ