共阴极7段数码管显示C程序
答案:1 悬赏:40
解决时间 2021-01-22 01:47
- 提问者网友:孤山下
- 2021-01-21 17:20
共阴极7段数码管显示C程序
最佳答案
- 二级知识专家网友:渊鱼
- 2021-01-21 18:55
照着这个去改写吧:
单片机7段数码管动态显示程序代码及其说明如下:
#include
#include
#include
unsigned char data dis_digit; //dis_digit---位选通值, 传送到P2口用于选通当
//前数码管的数值, 如等于0xfe时,选通P2.0口数码管
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char data dis_buf[8]; // dis_buf --- 显于缓冲区基地址
unsigned char data dis_index; // dis_index --- 显示索引, 用于标识当前显示的数码 //管和缓冲区的偏移量
Void delay(int t)
{
int i;
while(t--) {
for(i=0;i<120;i++)
{;}
}
}
Void main()
{
P0 = 0xff;
P2 = 0xff;
TMOD = 0x01; //定时器0工作于方式1
TH0 = 0x8C;
TL0 = 0x8B;
IE = 0x8A; //开总中断和定时器1中断允许
dis_buf[0] = dis_code[0x1];
dis_buf[1] = dis_code[0x2];
dis_buf[2] = dis_code[0x3];
dis_buf[3] = dis_code[0x4];
dis_buf[4] = dis_code[0x5];
dis_buf[5] = dis_code[0x6];
dis_buf[6] = dis_code[0x7];
dis_buf[7] = dis_code[0x8];
dis_digit = 0xf9; //控制在数码管上显示的数字效果,按位
dis_index = 0;
TR0 = 1;
while(1);
}
Void timer0() interrupt 1
//定时器0中断服务程序, 用于数码管的动态扫描
//dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
//dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值,
//如等于0xfe时, 选通P2.0口数码管 dis_buf --- 显于缓冲区基地址
{
TH0 = 0x8C;
TL0 = 0x8B;
P2 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P2 = dis_digit;
dis_digit = _crol_(dis_digit,2); // 位选通值左移, 下次中断时选通下一位数码管
delay(500);
dis_index++;
dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
}
单片机7段数码管动态显示程序代码及其说明如下:
#include
#include
#include
unsigned char data dis_digit; //dis_digit---位选通值, 传送到P2口用于选通当
//前数码管的数值, 如等于0xfe时,选通P2.0口数码管
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
unsigned char data dis_buf[8]; // dis_buf --- 显于缓冲区基地址
unsigned char data dis_index; // dis_index --- 显示索引, 用于标识当前显示的数码 //管和缓冲区的偏移量
Void delay(int t)
{
int i;
while(t--) {
for(i=0;i<120;i++)
{;}
}
}
Void main()
{
P0 = 0xff;
P2 = 0xff;
TMOD = 0x01; //定时器0工作于方式1
TH0 = 0x8C;
TL0 = 0x8B;
IE = 0x8A; //开总中断和定时器1中断允许
dis_buf[0] = dis_code[0x1];
dis_buf[1] = dis_code[0x2];
dis_buf[2] = dis_code[0x3];
dis_buf[3] = dis_code[0x4];
dis_buf[4] = dis_code[0x5];
dis_buf[5] = dis_code[0x6];
dis_buf[6] = dis_code[0x7];
dis_buf[7] = dis_code[0x8];
dis_digit = 0xf9; //控制在数码管上显示的数字效果,按位
dis_index = 0;
TR0 = 1;
while(1);
}
Void timer0() interrupt 1
//定时器0中断服务程序, 用于数码管的动态扫描
//dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
//dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值,
//如等于0xfe时, 选通P2.0口数码管 dis_buf --- 显于缓冲区基地址
{
TH0 = 0x8C;
TL0 = 0x8B;
P2 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P2 = dis_digit;
dis_digit = _crol_(dis_digit,2); // 位选通值左移, 下次中断时选通下一位数码管
delay(500);
dis_index++;
dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯