数码管俩位显示0到99加中断程序

如题所述

这本质是数码管的动态显示,所谓的动态显示是指数码管一位一位的轮流显示.每次只让一个数码管亮,还有就是要能分清楚共阴极与共阳极的区别.
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char//宏定义

uchar code table[]=
{
0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f
};
uchar num;
sbit p1=P2^0;
sbit p2=P2^1;

void init();//初始化函数

void delay(uint z);//延时函数

void dispaly(uchar num);//显示子程序

void main()
{
init();

while(1)
{
dispaly(num);

}

}

void init()//初始化函数
{
p1=1;

p2=1;

num=0;

TMOD=0x01;//采用定时器中断

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;
}

void dispaly(uchar num)//显示子程序
{
uchar a,b;

a=num/10;

b=num%10;
p1=0;

p2=1;

P1=table[a];

delay(3);

p1=1;

p2=0;

P1=table[b];

delay(3);

}

void delay(uint z)//延时函数
{
uint x,y;

for(x=z;x>0;x--)

for(y=120;y>0;y--);

}

void timer0() interruot 1
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;

if(t0==20)

{
t0=0;

num++;

if(num==100)

num=0;

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-19
下面的程序是采用两只按键一只加1,一只清0.两只数码管十位P0,个位P2口送段码。
本程序来自:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar Count = 0;
void main()
{
P0 = 0x00;
P2 = 0x00;
TMOD = 0x06;
TH0=255;
TL0=255;
ET0=1;
EX0=1;
EA =1;
IP =0x02;
IT0=1;
TR0=1;
while(1)
{
P0 = DSY_CODE[Count/10];
P2 = DSY_CODE[Count%10];
}
}
void Clear_Counter() interrupt 0
{
Count = 0;
}
void Key_Counter() interrupt 1
{
Count = (Count + 1) %100;
}
如果有具体要求可以再改。本回答被提问者和网友采纳
第2个回答  2012-12-22
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint a,num=0;
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
};
void delay(uint z);
void main()
{

TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1)
{

P0=table[num%10];
P2=7;
delay(1);

P0=table[num/10];
P2=6;
delay(1);

if(a==20)
{
a=0;
num++;
}

if(num==100)
num=0;
}
}

void dingshi() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
a++;
}

void delay(uint z)
{
uint x,y;
for(x=z;z>0;z--)
for(y=110;y>0;y--);
}

试试这个,只是没加按键了
相似回答