📄 zongji.c
字号:
#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1,count,key1num;
sbit key1=P3^3;
sbit key2=P3^1;
sbit key3=P3^2;
sbit zshi=P3^7;
sbit zge=P3^6;
sbit cshi=P3^5;
sbit cge=P3^4;
uchar code dis[]={
0X3f,/*0*/
0X06,/*1*/
0X5b,/*2*/
0X4f,/*3*/
0X66,/*4*/
0X6d,/*5*/
0X7d,/*6*/
0X07,/*7*/
0X7f,/*8*/
0X6f,/*9*/
0X00,/*NULL*/
};
void delay(uint c)
{
uint i,j;
for(i=0;i<c;i++)
for(j=0;j<100;j++);
}
void init()
{
TMOD=0x21;//设置定时器0为工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=0xfd;
TL1=0xfd;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
TR1=1;
REN=1;
SM0=0;
SM1=1;
ES=1;
num=56;
num1=56;
P3=0xff;
P2=0x00;
P1=0x00;
}
void guan()
{
zshi=1;
cshi=1;
zge=1;
cge=1;
}
void display(uchar dat_z,dat_c)
{
if(dat_z>=23&&dat_z<=56)
{
if(26<dat_z&&dat_z<=56)
{
P0=0xeb;
zshi=1;
P1=dis[(dat_z-23)%10];
zshi=0;
delay(5);
guan();
zge=1;
P1=dis[(dat_z-23)/10];
zge=0;
delay(5);
guan();
cshi=1;
P2=dis[(dat_c-26)%10];
cshi=0;;
delay(5);
guan();
cge=1;
P2=dis[(dat_c-26)/10];
cge=0;
delay(5);
}
if(dat_z>=23&&dat_z<=26)
{
P0=0xe2;//黄灯
zge=1;
P1=dis[(dat_z-23)%10];
zshi=0;
delay(1);
guan();
cshi=1;
cge=1;
P2=dis[(dat_z-23)%10];
cge=0;
delay(5);
guan();
}
}
if(dat_z<23)
{
if(dat_z>3&&dat_z<23)
{
P0=0xdd;//红灯
zshi=1;
P1=dis[(dat_z)%10];
zshi=0;
delay(5);
guan();
zge=1;
P1=dis[(dat_z)/10];
zge=0;
delay(5);
guan();
cshi=1;
P2=dis[(dat_c-3)%10];
cshi=0;
delay(5);
guan();
cge=1;
P2=dis[(dat_c-3)/10];
cge=0;
delay(5);
guan();
}
if(dat_z<=3)
{
P0=0xd4;
cge=1;
P1=0xff;
zshi=0;
P1=dis[(dat_z)%10];
delay(1);
zshi=1;
guan();
zge=1;
zshi=1;
cge=1;
P2=0xff;
cshi=0;
P2=dis[(dat_z)%10];
delay(1);
cshi=1;
guan();
}
}
}
void displayz(uchar dat_z)
{
cge=1;
if(dat_z>=23&&dat_z<=56)
{
if(26<dat_z&&dat_z<=56)
{
P0=0xeb;
zshi=1;
P1=dis[(dat_z-23)%10];
zshi=0;
delay(5);
guan();
zge=1;
P1=dis[(dat_z-23)/10];
zge=0;
delay(5);
guan();
}
if(dat_z>=23&&dat_z<=26)
{
P0=0xe2;//黄灯
zge=1;
P1=dis[(dat_z-23)%10];
zshi=0;
delay(1);
guan();
}
if(dat_z<23)
{
if(dat_z>3&&dat_z<23)
{
P0=0xdd;//红灯
zshi=1;
P1=dis[(dat_z)%10];
zshi=0;
delay(5);
guan();
zge=1;
P1=dis[(dat_z)/10];
zge=0;
delay(5);
guan();
}
if(dat_z<=3)
{
P0=0xd4;
cge=1;
P1=0xff;
zshi=0;
P1=dis[(dat_z)%10];
delay(1);
zshi=1;
guan();
}
}
}
}
void displayc(uchar dat_c)
{
if(dat_c>=23&&dat_c<=56)
{
if(26<dat_c&&dat_c<=56)
{
P0=0xeb;
cshi=1;
P2=dis[(dat_c-26)%10];
cshi=0;;
delay(5);
guan();
cge=1;
P2=dis[(dat_c-26)/10];
cge=0;
delay(5);
guan();
}
if(dat_c>=23&&dat_c<=26)
{
P0=0xe2;//黄灯
cshi=1;
cge=1;
P2=dis[(dat_c-23)%10];
cge=0;
delay(5);
guan();
}
}
if(dat_c<23)
{
if(dat_c>3&&dat_c<23)
{
P0=0xdd;//红灯
guan();
cshi=1;
P2=dis[(dat_c-3)%10];
cshi=0;
delay(5);
guan();
cge=1;
P2=dis[(dat_c-3)/10];
cge=0;
delay(5);
guan();
}
if(dat_c<=3)
{
zge=1;
zshi=1;
cge=1;
P2=0xff;
cshi=0;
P2=dis[(dat_c)%10];
delay(1);
cshi=1;
guan();
}
}
}
void keyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
key1num++;
while(!key1)
{
display(num,num1);
}
if(key1num==1)
{
TR0=0;
}
if(key1num==3)
{
key1num=0;
TR0=1;
}
}
}
if(key1num!=0)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
if(key1num==1)
{
while(!key2)
{
displayz(num);
}
num++;
if(num==56)
{
num=0;
}
}
if(key1num==2)
{
while(!key2)
{
displayc(num1);
}
num1++;
if(num1==56)
num1=0;
}
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
if(key1num==1)
{
while(!key3)
{
displayz(num);
}
num--;
if(num==0)
{
num=56;
}
}
if(key1num==2)
{
while(!key3)
{
displayc(num1);
}
num1--;
if(num1==0)
num1=56;
}
}
}
}
}
void main()
{
init();
while(1)
{
/////////////
if(flag==1)
{
}
if(count==20)
{
count=0;
num--;
num1--;
if(num==0)
num=56;
if(num1==0)
num1=56;
}
if(key1num!=0)
{
if(key1num==1)
{
displayz(num);
}
if(key1num==2)
{
displayc(num1);
}
}
if(key1num==0)
{
display(num,num1);
}
keyscan();
}
}
void t0(void ) interrupt 1 //定时器T0
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
count++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -