📄 xxh.c
字号:
#include <reg52.h>
#define PORTSEG P0 // 数码管段输出
#define PORTDIG P2 // 数码管位输出
sbit KEY0 = P1^7;
sbit KEY1 = P1^6;
unsigned char i_ms,i_sec,i_min;
unsigned char c_disp_dat[8],i_cur_dig;
bit b_flag;
char code seg_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
void time() interrupt 1 // 10ms 到了更新时间值
{
TH0=0x78;
TL0=0xEC;
TR0=1;
if(i_ms++ == 100) // ms 计数到100ms
{
i_ms = 0; // ms 清零
if(i_sec++ == 60) // 秒计数加一
{
i_sec = 0; // 秒计数达到60 就清0
if(i_min++ == 60) // 分计数加一
{
i_min = 0; // 分计数达到60 就清0
}
}
}
c_disp_dat[0]=seg_7[i_min/10]; // 把要显示的分钟数的十位数段码查出来
c_disp_dat[1]=seg_7[i_min%10]; // 把要显示的分钟数的个位数段码查出来
c_disp_dat[2]=seg_7[i_sec/10]; // 把要显示的秒钟数的十位数段码查出来
c_disp_dat[3]=seg_7[i_sec%10]; // 把要显示的秒钟数的个位数段码查出来
c_disp_dat[4]=seg_7[i_ms/10]; // 把要显示的毫秒数的十位数段码查出来
c_disp_dat[5]=seg_7[i_ms%10]; // 把要显示的毫秒数的个位数段码查出来
}
void interact() interrupt 3 //隔一段时间切换显示一位LED,实现扫描显示
{
TH1=0xf6;
TL1=0x3c;
TR1=1;
PORTSEG = 0x0;
if(++i_cur_dig==6) // 共需要显示6位数字
{
PORTDIG = 0xdf;
i_cur_dig = 0;
}
else
PORTDIG = ~((~PORTDIG)>>1); // 显示右边一位LED
PORTSEG = c_disp_dat[i_cur_dig]; // 段码输出
}
void delay(unsigned char i) // 延时程序
{
while(i--);
}
void main()
{
EA=0; //关所有中断
TMOD=0x01; // T0、T1 均为16位计数模式
TH0=0x78;
TL0=0xEC;
TH1=0xf6;
TL1=0x3c;
i_ms = i_sec = i_min = 0;
i_cur_dig = 0;
PORTDIG = 0xfe;
ET0=1; //开T0中断
TR0=1;
ET1=1; //开T1中断
TR1=1;
EA=1; //开所有中断
while(1)
{
if(KEY0 == 0) //检测是否按下 key0 按键
{
delay(100); // 消抖
if(KEY0 == 0)
{
TR0 = ~TR0; // 暂停秒表
while(KEY0 == 0) // 等待按键释放
{}
}
}
if(KEY1 == 0) //检测是否按下 key1 按键
{
delay(100); // 消抖
if(KEY1 == 0)
{
i_ms = i_sec = i_min = 0; // 清秒表计数
while(KEY0 == 0) // 等待按键释放
{}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -