📄 shizhongketiaoziqi1-3.c
字号:
#include<reg51.h>//头文件
#define uint unsigned int
#define uchar unsigned char//宏定义,注意格式,不带分号*
unsigned char code table0[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码表共阳极
unsigned char code table2[]={0xFB,0xF7,0xEF,0xDF,0xBF,0x67F};//位码表
sbit k1=P3^3;
sbit k2=P3^4;
sbit k3=P3^5;//键盘定义部分
void chushihua();
void display5(uchar aa,uchar bb,uchar cc,uchar dd,uchar shi,uchar ge);
void delay(uchar z);//子程序声名部分
uchar aa,bb,cc,dd,shi,ge,ss,num,shu,temp;//定义全局变量
uint a;
void main()//主函数
{
chushihua();
while(1)
{
display5(aa,bb,cc,dd,shi,ge);
}
}
void delay(uchar z)//带参数的延时子程序
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void chushihua()//初始化子程序
{
num=23;
shu=58;
temp=0;//赋初值
aa=num/10;
bb=num%10;
cc=shu/10;
dd=shu%10;
shi=temp/10;
ge=temp%10;//位隔离部分
P2=0xff;//先关所有数码管,为了防止有暗影和乱码出现
delay(10);
TMOD=0X01;//选择T0工作在模式1
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;//赋初值50毫秒晶振11.0592MHZ
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void display5(uchar aa,uchar bb,uchar cc,uchar dd,uchar shi,uchar ge)//显示之程序
{
if(ss==20)
{
ss=0;
temp++;
}
if(k1==0)//键盘部分
{
TR0=0;//进来先关定时器
delay(10);//消抖语句
if(k1==0);
while(!k1);
delay(10);//消抖语句
while(!k1);//松手检测
temp++;
if(temp==60)temp=0;
TR0=1;//出去之前先开定时器
}
if(temp==60)
{
temp=0;
shu++;
}
if(k2==0)//键盘部分
{
TR0=0;//进来先关定时器
delay(10);//消抖语句
if(k2==0);
while(!k2);
delay(10);//消抖语句
while(!k2);//松手检测
shu++;
if(shu==60)shu=0;
TR0=1;//出去之前先开定时器
}
shi=temp/10;
ge=temp%10;
P2=0xff;
delay(5);
P0=table0[shi];
delay(5);
P2=0xf7;
delay(5);
P2=0xff;
delay(5);
P0=table0[ge];
delay(5);
P2=0xfb;
delay(5);
if(shu==60)
{
shu=0;
num++;
}
if(k3==0)//键盘部分
{
TR0=0;//进来先关定时器
delay(10);//消抖语句
if(k3==0);
while(!k3);
delay(10);//消抖语句
while(!k3);//松手检测
num++;
if(num==24)num=0;
TR0=1;//出去之前先开定时器
}
cc=shu/10;//分时隔离部分
dd=shu%10;
P2=0xff;
delay(5);
P0=table0[cc];//段选部分
delay(5);
P2=0xdf;//位选部分
delay(5);
P2=0xff;
delay(5);
P0=table0[dd];
delay(5);
P2=0xef;
delay(5);
if(num==24)num=0;
aa=num/10;
bb=num%10;
P2=0xff;
delay(5);
P0=table0[aa];
delay(5);
P2=0x7f;
delay(5);
P2=0xff;
delay(5);
P0=table0[bb];
delay(5);
P2=0xbf;
delay(5);
}
void timer0()interrupt 1//中断部分,不用声明,中段T0
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;//重赋初值
ss++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -