生成c51语言代码:1、用Proteus软件画出电路原理图。要求在P1.0至P1.7 口线_上分别接LED0至LED7八个发光二极管,在P3. 0口线 上接---蜂鸣器。 2、编写c51程序:要求LED0至LED7以秒速率循环右移,在灯移动的同时,用定时器和计数器来控制蜂鸣器逐位报警
时间: 2024-03-10 17:49:27 浏览: 96
单片机C51 控制LED依次发亮
以下是生成的C51语言代码:
```
#include <reg52.h>
// 定义LED灯的IO口
sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;
// 定义蜂鸣器的IO口
sbit buzzer = P3^0;
// 定义计数器和定时器
unsigned int count = 0;
unsigned int timer = 0;
// 定义延时函数
void delay(unsigned int time)
{
while(time--);
}
// 定义定时器中断函数
void timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
timer++;
if(timer == 20) // 定时器计数到20
{
timer = 0;
count++;
}
if(count == 8) // 计数器计数到8
{
count = 0;
}
}
// 主函数
void main()
{
TMOD = 0x01; // 设置定时器0为16位自动重装模式
TH0 = (65536 - 50000) / 256; // 定时器初值
TL0 = (65536 - 50000) % 256;
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
while(1)
{
LED0 = (count == 0) ? 0 : 1;
LED1 = (count == 1) ? 0 : 1;
LED2 = (count == 2) ? 0 : 1;
LED3 = (count == 3) ? 0 : 1;
LED4 = (count == 4) ? 0 : 1;
LED5 = (count == 5) ? 0 : 1;
LED6 = (count == 6) ? 0 : 1;
LED7 = (count == 7) ? 0 : 1;
if(count == 0) // 控制蜂鸣器逐位报警
{
buzzer = 1;
delay(500);
buzzer = 0;
delay(500);
}
else if(count == 1)
{
buzzer = 1;
delay(400);
buzzer = 0;
delay(400);
}
else if(count == 2)
{
buzzer = 1;
delay(300);
buzzer = 0;
delay(300);
}
else if(count == 3)
{
buzzer = 1;
delay(200);
buzzer = 0;
delay(200);
}
else if(count == 4)
{
buzzer = 1;
delay(100);
buzzer = 0;
delay(100);
}
else if(count == 5)
{
buzzer = 1;
delay(200);
buzzer = 0;
delay(200);
}
else if(count == 6)
{
buzzer = 1;
delay(300);
buzzer = 0;
delay(300);
}
else if(count == 7)
{
buzzer = 1;
delay(400);
buzzer = 0;
delay(400);
}
}
}
```
阅读全文