发布网友 发布时间:2022-04-22 00:49
共2个回答
热心网友 时间:2022-07-08 03:57
#include <REGX52.H>
const unsigned char DisCode[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管各显示数据 0~F对应的数码管显示
const unsigned char Dis_bit[8]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}; //数码管各显示位 对8个数码管的控制
unsigned char Dis_buf[2]={0}; //显示字符缓冲区
unsigned char bit_point=0; //当前显示位指针
unsigned int count;
char Num=99;
/*******************************************
* 函数名:Led_Print
* 功能: 数码管显示值储存到数码管显存buff中
* 参数: 显示数值
* 还回值: 无
*********************************************/
void Led_Print(long disdata) //确定显示内容的函数
{
Dis_buf[0] = DisCode[disdata/10];
Dis_buf[1] = DisCode[disdata%10];
}
/*******************************************
* 函数名:Led_Scan()
* 功能: 数码管扫描
* 参数: 无
* 返回值: 无
*********************************************/
void Led_Scan()//显示函数
{
P0=0x00;
P0=Dis_buf[bit_point];//显示缓冲区中的字符
P1=Dis_bit[bit_point]; //设置当前显示位
bit_point++; //准备下一显示字符
if(bit_point==2) //如果显示位大于8,则将显示位指针置0;
{
bit_point=0;
}
}
/*********************************************************
名称:device_init(void)
功能:初始化端口、状态寄存器
参数:无
***********************************************************/
void device_init(void)
{
TMOD=0x02; //设置定时器0的工作方式为1
TH0=0x47; //设置定时器0初始值 ,22.1184M 定时0.1ms
TL0=0x47;
TR0 = 1;
IE=0x82; //打开全局中断和定时器0溢出中断
}
/******************************************************
名称:timer0_over
功能:定时器/计数器0溢出中断服务程序
参数:无
*******************************************************/
void timer0_over(void) interrupt 1
{
count++; //计数一次
if(count==10000)//10000*0.1ms=1s
{
count = 0;
Num--;
if(Num < 0) Num=99;
Led_Print(Num);
}
Led_Scan();
}
void main()
{
device_init();
Led_Print(Num);
while(1)
{}
}
热心网友 时间:2022-07-08 03:57
两个扫描轮换显示,转换周期尽量小一点,看实际效果调整型扫描周期