📄 eg.c
字号:
#include <at89x51.h>
#include<absacc.h>
#include<stdio.h>
#include<math.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar num1;
uchar num2;
uchar n=0;
uchar num=0;
uchar flag=0;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void hour(void);
void Delay (void)//键盘延时程序
{
uint i;
for(i=0;i<300;i++);
}
void Leddelay(void)//LED 刷新延迟
{
uchar i;
for(i=0;i<255;i++)
{
;
}
}
uchar Key() //键盘处理函数
{
uchar a,b,c; //定义3 个变量
EA=0;
Delay(); //延时
if ((P1&0x0f)!=0x0f) //有键按下处理
{
a=(P1&0x0f); //键值放入寄存器a
P1=0xf0; //将键盘口置为11110000
c=(P1&0xf0);
a=a|c; //将两个数据融合
}
switch(a) //对比数据值
{
case 0xee: b=3; break;
case 0xed: b=7; break;
case 0xeb: b=11; break;
case 0xe7: b=15; break;
case 0xde: b=2; break;
case 0xdd: b=6; break;
case 0xdb: b=10; break;
case 0xd7: b=14; break;
case 0xbe: b=1; break;
case 0xbd: b=5; break;
case 0xbb: b=9; break;
case 0xb7: b=13; break;
case 0x7e: b=0; break;
case 0x7d: b=4; break;
case 0x7b: b=8; break;
case 0x77: b=12; break;
default: return(0xff); //键值错误处理
}
EA=1;
P1=0x0f;
return(b); //将b作为返回值
}
void Display(uchar b,uchar a) //LED显示
{
uchar fq,fb,fs,fg;
if(a!=0xff) //用于串口接收数据显示
{
fq=a/10;
fb=a%10;
P2=0xfe;
P0=tab[fb];
Leddelay();
P2=0xfd;
P0=tab[fq];
Leddelay();
P2=0xff;
}
if(b!=0xff)
{
fs=b/10;
fg=b%10;
P2=0xfb;
P0=tab[fg];
Leddelay();
P2=0xf7;
P0=tab[fs];
Leddelay();
P2=0xff;
}
}
void main(void)
{
TMOD = 0x10;
TH1 = 0x3c;
TL1 = 0xb0;
EA=1;
EX0=1;//外部中断0使能
ET1=1;
IT0=1;//负脉冲触发
TR1 = 1;
P1=0x0f;
while(1)
{
hour();
if(flag==0)
{
hour();
Display(num2,num);
}
if(flag==1)
{
hour();
Display(num1,num2);
}
}
}
void hour(void)
{
if(n==20)
{
n=0;
num++;
if(num==60)
{
num=0;
num2++;
if(num2==60)
{
num2=0;
num1++;
if(num1==24)
{
num1=0;
}
}
}
}
}
void time1_int(void) interrupt 3
{
TH1 = 0x3c;
TL1 = 0xb0;
n++;
}
void intersvr0(void) interrupt 0 //键盘中断
{
Delay(); //延时
if ((P1&0x0f)!=0x0f)
{
flag++;
if(flag>=2)
{
flag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -