📄 ex4_3.c
字号:
//程序:ex4_3.c
//功能:可控信号灯程序
#include <reg51.h>
//函数名:delay0_5s
//函数功能:用T0的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定
// 时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒
//形式参数:无
//返回值:无
void delay0_5s()
{
unsigned char i;
for(i=0;i<0x0a;i++) // 设置10次循环次数
{
TH0=0x3c; // 设置定时器初值
TL0=0xb0;
TR0=1; // 启动T0
while(!TF0); // 查询计数是否溢出,即定时50ms时间到,TF0=0
TF0=0; // 50ms定时时间到,将定时器溢出标志位TF0清零
}
}
//函数名:delay_t
//函数功能:实现0.5秒~128秒延时
//形式参数:unsigned char t;
// 延时时间为0.5秒×t
//返回值:无
void delay_t(unsigned char t)
{
unsigned char i;
for(i=0;i<t;i++)delay0_5s();
}
//函数名:int_0
//函数功能:外部中断0中断函数,当CPU响应外部中断0的中断请求时,自动执行该
// 函数,实现八个信号灯闪烁
//形式参数:无
//返回值:无
void int_0() interrupt 0 //外部中断0的中断号为0
{
P1=0x00; //熄灭八个信号灯
delay0_5s(); //调用0.5秒延时函数
P1=0xff; //点亮八个信号灯
delay0_5s(); //调用0.5秒延时函数
}
void main() //主函数
{
unsigned char i,w;
EA=1; // 打开中断总允许位
EX0=1; // 打开外部中断0允许位
IT0=1; // 设置外部中断为边沿(下降沿)触发方式
TMOD=0x01; // 设置T0为工作方式1
while(1) {
w=0x01; // 显示码初值为01H
for(i=0;i<8;i++)
{
P1=~w; // w取反后送P1口,点亮相应LED灯
w<<=1; // 点亮灯的位置移动
delay_t(2); // 调用延时函数delay_t(),实际参数为2,延时1秒
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -