51绿板数码管动态显示
来源:互联网 发布:矩阵论教程 张绍飞 pdf 编辑:程序博客网 时间:2024/04/29 01:14
/********************************************************************************
数码管动态显示
定时器定时1ms,数码管以秒表计时
********************************************************************************/
数码管动态显示
定时器定时1ms,数码管以秒表计时
********************************************************************************/
#include<reg52.h>
unsigned char code LedChar[] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E //0到的F十六进制
};
unsigned char LedBuff[4] = {
0xFF,0xFF,0xFF,0xFF //4个数码管的显示缓冲区
};
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E //0到的F十六进制
};
unsigned char LedBuff[4] = {
0xFF,0xFF,0xFF,0xFF //4个数码管的显示缓冲区
};
void main()
{
unsigned int cnt = 0;
unsigned long sec = 0;
unsigned char i = 0;
{
unsigned int cnt = 0;
unsigned long sec = 0;
unsigned char i = 0;
TMOD = 0x01; //定时器模式寄存器TMOD选择模式1
TH0 = 0xFC; //高8位
TL0 = 0x18; //低8位 //定时器0定时1ms
TR0 = 1; //定时器0运行控制位置1,开定时器0
TH0 = 0xFC; //高8位
TL0 = 0x18; //低8位 //定时器0定时1ms
TR0 = 1; //定时器0运行控制位置1,开定时器0
while(1){
if (TF0 == 1) //1ms定时时间到 , 且数码管显示放在此if语句内,则使各数码管以1ms间隔轮流显示,即每个数码管隔3ms刷新一次,3ms<=10ms,有余晖效应
{
TF0 = 0;
TH0 = 0xFC; //T0重新定时1ms
TL0 = 0x18;
cnt++;
if (cnt>=1000) //1s到
{
cnt = 0;
sec++; //总时间加1s
LedBuff[0] = LedChar[sec%10]; //分离每一位上的数字
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
}
if (TF0 == 1) //1ms定时时间到 , 且数码管显示放在此if语句内,则使各数码管以1ms间隔轮流显示,即每个数码管隔3ms刷新一次,3ms<=10ms,有余晖效应
{
TF0 = 0;
TH0 = 0xFC; //T0重新定时1ms
TL0 = 0x18;
cnt++;
if (cnt>=1000) //1s到
{
cnt = 0;
sec++; //总时间加1s
LedBuff[0] = LedChar[sec%10]; //分离每一位上的数字
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
}
P2 = 0xFF; //此句为消除瞬间错误,例如case1下,P0已刷新而P2暂留在case0状态瞬间,会造成case0下数码管瞬间显示错误数值,在每次进入开关语句前关闭所有数码管即可消除该错误
switch(i) //使四位数码管以1ms间隔轮流刷新,即每个数码管隔3ms刷新一次
{
case 0: P0 = LedBuff[0]; P2 = 0x7F; i++; break; //段选P0,位选P2 ,P0、P2已在<reg52.h>中sfr
case 1: P0 = LedBuff[1]; P2 = 0xBF; i++; break;
case 2: P0 = LedBuff[2]; P2 = 0xDF; i++; break;
case 3: P0 = LedBuff[3]; P2 = 0xEF; i=0; break;
default : break;
}
}
}
}
switch(i) //使四位数码管以1ms间隔轮流刷新,即每个数码管隔3ms刷新一次
{
case 0: P0 = LedBuff[0]; P2 = 0x7F; i++; break; //段选P0,位选P2 ,P0、P2已在<reg52.h>中sfr
case 1: P0 = LedBuff[1]; P2 = 0xBF; i++; break;
case 2: P0 = LedBuff[2]; P2 = 0xDF; i++; break;
case 3: P0 = LedBuff[3]; P2 = 0xEF; i=0; break;
default : break;
}
}
}
}
阅读全文
1 0
- 51绿板数码管动态显示
- 51单片机动态数码管显示
- 51单片机数码管动态显示
- Xilinx basys2开发板 数码管动态显示 以及 数码管封装
- 51单片机数码管的动态显示
- 数码管动态显示字符
- 单片机数码管动态显示
- 动态数码管显示
- 动态数码管显示
- 数码管动态显示
- 数码管动态显示
- 数码管动态显示
- 数码管动态显示123456
- 动态数码管显示
- 数码管显示动态数据
- 动态数码管显示
- 动态数码管显示
- 51单片机 数码管的静态显示和动态显示
- 遗传算法
- Fragment的简单使用
- 适配器模式
- 【好男/女人要去哪裡找?遇人不淑…
- 【转】 海量数据处理系列----C++中Bitmap算法的实现
- 51绿板数码管动态显示
- html学习16-网页联系-超链接-外部链接
- 回文数
- 【悲剧带来的不仅仅只是痛苦,也带…
- 【转】C++输入输出操作符的重载
- 【做人啊,不要太压抑心裡的杜烂】…
- C++ string 详解(转载)
- 如何用TensorFlow预测时间序列:TFTS库详细教程
- 【不安没关系、伤心没关系,寂寞或…