void main() { TMOD =0X01; TH0=0xFC; TL0=0x18; IE=0x82; LCD_Init(); x=0; while(1) { m=second/10; s=second%10; Nixie(1,m); Nixie(2,s); KeyNum=Key(); MKeyNum=MatrixKey(); if(KeyNum) { j=KeyNum; switch(j) { case 1: TR0=~TR0;break; case 2: sec[x]=second;x++;break; case 3: n=1;break; default: break; } } if(MKeyNum==1) { if(k<20) k++; LCD_ShowNum(1,1,sec[k],2); } if(MKeyNum==2) { if(k>0) k--; LCD_ShowNum(1,1,sec[k],2); } } } void Timer0() interrupt 1 { static unsigned int timer; TH0=0XFC; TL0=0X18; if(n==1) { Beep(100); Delay(5); Beep(100); Delay(5); Beep(100); second=0; TR0=0; n=0; x=0; } timer++; if(timer==1000) { timer=0; second++; if(second%10==0) Beep(50); if(second==100) second=0; } }
时间: 2023-08-04 07:06:40 浏览: 98
这段代码是主函数和一个中断函数。主函数中主要是对各种变量进行赋值和控制,同时运行一个while循环不断执行程序。中断函数是一个定时器中断,每当定时器计时到一定值时,就会触发该中断函数,进行相应的操作。
下面是对主函数和中断函数各部分的注释:
```C
void main() {
TMOD =0X01; // 设置定时器0为模式1
TH0=0xFC; // 设置定时器0的高8位计数初值
TL0=0x18; // 设置定时器0的低8位计数初值
IE=0x82; // 开启定时器0中断
LCD_Init(); // 初始化液晶显示屏
x=0; // 将变量x的值设为0
while(1) // 进入循环
{
m=second/10; // 将second除以10得到十位数
s=second%10; // 将second模10得到个位数
Nixie(1,m); // 将十位数显示在数码管1上
Nixie(2,s); // 将个位数显示在数码管2上
KeyNum=Key(); // 读取按键的值
MKeyNum=MatrixKey(); // 读取矩阵按键的值
if(KeyNum) // 如果按键被按下
{
j=KeyNum; // 将按键的值赋给j
switch(j) // 根据按键的值进行相应的操作
{
case 1: TR0=~TR0;break; // 如果按下的是1号键,则翻转定时器0的开关
case 2: sec[x]=second;x++;break; // 如果按下的是2号键,则将当前秒数存入数组sec中
case 3: n=1;break; // 如果按下的是3号键,则将n的值设为1
default: break; // 如果按下的是其他键,则什么也不做
}
}
if(MKeyNum==1) // 如果按下的是矩阵按键1
{
if(k<20) k++; // 如果k的值小于20,则将k的值加1
LCD_ShowNum(1,1,sec[k],2); // 在液晶显示屏上显示数组sec中第k个元素的值
}
if(MKeyNum==2) // 如果按下的是矩阵按键2
{
if(k>0) k--; // 如果k的值大于0,则将k的值减1
LCD_ShowNum(1,1,sec[k],2); // 在液晶显示屏上显示数组sec中第k个元素的值
}
}
}
void Timer0() interrupt 1 { // 定时器0中断函数
static unsigned int timer; // 定义一个静态变量timer
TH0=0XFC; // 重新设置定时器0的高8位计数初值
TL0=0X18; // 重新设置定时器0的低8位计数初值
if(n==1) // 如果n的值为1
{
Beep(100); // 发出三声蜂鸣声
Delay(5); // 延时5毫秒
Beep(100); // 发出三声蜂鸣声
Delay(5); // 延时5毫秒
Beep(100); // 发出三声蜂鸣声
second=0; // 将second的值设为0
TR0=0; // 关闭定时器0
n=0; // 将n的值设为0
x=0; // 将x的值设为0
}
timer++; // 将timer的值加1
if(timer==1000) // 如果timer的值为1000
{
timer=0; // 将timer的值设为0
second++; // 将second的值加1
if(second%10==0) Beep(50); // 每隔10秒发出一声短蜂鸣声
if(second==100) second=0; // 如果second的值为100,则将其设为0
}
}
```