📄 main.c
字号:
//大虾电子网为大虾时钟实验板所配程序
//可以键切换显示时/分显示时钟或者秒/分秒显示
//可以键控时钟停止和运行
//电路图和产品地址http://shop.daxia.com/product.asp?id=682
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一个52标准内核的头文件
sbit K1= P3^2; //第一个按键
sbit K2= P3^3; //第二个按键
sbit K3= P3^4; //第三个按键
sbit K4= P3^5; //第四个按键
//自己可以定义更多的按键
uchar code dx516[3] _at_ 0x003b;//这是为了仿真设置的
//共33个字模:依次为16个无小数点的LED显示数码+16个有小数点的LED数码+1个全灭 (有些数码管没有小数点,其中2个小数点位置在中间的时钟点上)
//"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","0.","1.","2.","3.","4.","5.","6.","7.","8.","9.","A.","B.","C.","D.","E.","F."," "
uchar code numcode[33]={0xa0,0xbe,0x62,0x2a,0x3c,0x29,0x21,0xba,0x20,0x28,0x30,0x25,0xe1,0x26,0x61,0x71,0x80,0x9e,0x42,0x0a,0x1c,0x09,0x01,0x9a,0x00,0x08,0x10,0x05,0xc1,0x06,0x41,0x51,0xff};
//定义时,分,秒,分秒
uchar hour=8;//小时
uchar min=0; //分
uchar sec=0; //秒
uchar fsec=0; //分秒
uchar mode=1;//显示模式,默认为显示秒和分秒
bit run=1; //是否计时 =1计时,=0暂停
uchar dis[4]; //4位显示缓存
void main(void) // 主程序
{
uchar i;
RCAP2H =0xee; //1/400秒中断一次
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
PT2=1; //定时器2优先
EA=1; //打开总中断
while(1) //程序循环
{
//显示数据
if(mode==0) //显示小时+分钟模式
{
dis[3]=hour/10; //显示小时
dis[2]=hour%10;
if((fsec>50)) //每一秒中的一半灭掉和显示时钟点
{
dis[1]=min/10; //不显示时钟点
dis[0]=min%10;
}
else
{
dis[1]=min/10+16; //显示时钟点
dis[0]=min%10+16;
}
}
else if(mode==1) //显示秒+分秒模式
{
dis[3]=sec/10;
dis[2]=sec%10;
dis[1]=fsec/10+16; //+16把中间的时钟点同时显示出来
dis[0]=fsec%10+16;
}
//扫描开关
if(!K1) //显示时,分
{
mode=0;
while(!K1);
for(i=0;i<255;i++);
}
if(!K2) //显示秒,分秒
{
mode=1;
while(!K2);
for(i=0;i<255;i++);
}
if(!K3) //启动计时
{
run=1;
while(!K3);
for(i=0;i<255;i++);
}
if(!K4) //停止计时
{
run=0;
while(!K4);
for(i=0;i<255;i++);
}
}
}
//定时器2中断,兼LED扫描和时钟
timer2() interrupt 5
{
uchar code p1line[4]={0xf7,0xfb,0xfd,0xfe}; //P1扫描线,轮流用低点品扫描4条线,扫描4个数码管
static uchar t;
TF2=0;
t++;
//时间计时
if(t==4)
{
t=0;
if(run)fsec++; //分秒加1
if(fsec==100)
{
fsec=0;
sec++; //秒加1
if(sec==60)
{
sec=0;
min++; //分加1
if(min==60)
{
min=0;
hour++; //小时加1
if(hour==24)hour=0;
}
}
}
}
//扫描数码管
P1= 0xff; //这句是防止出现鬼影,
P2=numcode[dis[t]];
P1= p1line[t];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -