设计程序满足要求:1.主程序奇数灯闪烁。2.按下按钮k,发生中断,此时偶数灯闪亮3次后返回主程序。写出主要部分程序。用keil写出来
时间: 2024-03-01 07:55:18 浏览: 74
keil编写的程序
以下是主要部分程序的示例代码,使用Keil编写:
```C
#include <reg52.h>
sbit LED1 = P1^0; // 奇数灯
sbit LED2 = P1^1; // 偶数灯
sbit BTN = P3^2; // 按钮
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for(i=xms; i>0; i--)
for(j=112; j>0; j--);
}
void main()
{
unsigned int count = 0; // 灯闪烁计数器
unsigned int flag = 0; // 中断标志位
TMOD = 0x01; // 定时器0工作在模式1下
TH0 = 0xFC; // 定时器0初值高8位
TL0 = 0x67; // 定时器0初值低8位
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
while(1)
{
if(count % 2 == 0) // 偶数灯
{
LED2 = 1;
delay(500);
LED2 = 0;
delay(500);
}
else // 奇数灯
{
LED1 = 1;
delay(500);
LED1 = 0;
delay(500);
}
count++;
if(flag == 1) // 中断处理
{
unsigned int i;
for(i=0; i<3; i++)
{
LED2 = 1;
delay(500);
LED2 = 0;
delay(500);
}
flag = 0; // 处理完毕,清除中断标志位
}
}
}
void Timer0_ISR() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xFC; // 定时器0初值高8位
TL0 = 0x67; // 定时器0初值低8位
static unsigned int k = 0;
k++;
if(k == 200) // 1秒钟
{
k = 0; // 计数器清零
count++; // 灯闪烁计数器加1
}
}
void External_ISR() interrupt 0 using 1 // 外部中断0服务程序
{
flag = 1; // 设置中断标志位
}
```
这段程序使用定时器0控制灯的闪烁,并且设置了一个计数器来记录灯的状态。同时,使用外部中断0来处理按钮按下的事件,当按钮按下时,将flag标志位置为1,以便在主程序中处理中断事件。
阅读全文