51单片机控制数码管闪烁
时间: 2024-05-20 09:09:49 浏览: 122
51单片机控制数码管闪烁的方法可以通过定时器和中断实现,具体步骤如下:
1. 设置定时器,设定一个时间周期,可以根据需要设置。
2. 在定时器中断服务函数中编写数码管显示程序,控制数码管输出的数字和显示的时间。
3. 在主程序中启用定时器,使得定时器开始工作并定时中断,执行数码管显示程序。
以下是51单片机控制数码管闪烁的代码示例:
```
#include <reg52.h> // 包含头文件
#define uchar unsigned char // 定义无符号字符类型
#define uint unsigned int // 定义无符号整型类型
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4; // 定义数码管引脚
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 定义显示数字的编码
uint num=0; // 定义全局变量num表示数码管需要显示的数字
void delay(uint xms); // 延时函数
void DigDisplay(); // 数码管显示函数
void main()
{
TMOD=0x01; // 设置定时器为模式1
TH0=(65536-2000)/256; // 设定定时器初值
TL0=(65536-2000)%256;
ET0=1; // 开启定时器中断
EA=1; // 开启总中断
TR0=1; // 启动定时器
while(1)
{
num++; // 数码管需要显示的数字加1
if(num==100) // 当数码管需要显示的数字达到100时,归零重新开始计数
{
num=0;
}
DigDisplay(); // 执行数码管显示函数
}
}
void DigDisplay() // 数码管显示函数
{
uchar i;
for(i=0;i<8;i++)
{
switch(i) // 判断当前位数,确定选通哪个数码管
{
case(0):LSA=0;LSB=0;LSC=0;break; // 第1个数码管
case(1):LSA=1;LSB=0;LSC=0;break; // 第2个数码管
case(2):LSA=0;LSB=1;LSC=0;break; // 第3个数码管
case(3):LSA=1;LSB=1;LSC=0;break; // 第4个数码管
case(4):LSA=0;LSB=0;LSC=1;break; // 第5个数码管
case(5):LSA=1;LSB=0;LSC=1;break; // 第6个数码管
case(6):LSA=0;LSB=1;LSC=1;break; // 第7个数码管
case(7):LSA=1;LSB=1;LSC=1;break; // 第8个数码管
}
P0=table[num%10]; // 显示当前位的数字
delay(5); // 延时一段时间
P0=0x00; // 关闭当前位的显示
}
}
void delay(uint xms) // 延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void timer() interrupt 1 // 定时器中断服务函数
{
TH0=(65536-2000)/256; // 重设定时器初值
TL0=(65536-2000)%256;
}
```
阅读全文