本帖最后由 tongshaoqiang 于 2012-12-4 22:39 编辑
各位前辈,刚入门51单片机,没想通用4位数码管显示十进制数字,感觉即使位选后,段选总是想通的,实现不了。大家给指点一下。
我想实现前两位数码管显示0~59每隔1s计数,没考虑好怎么实现。(下面我写的代码)哪位有耐心的帮俺指点一下啊,困惑了好几晚上了。:dizzy:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit pnp1=P1^0;
sbit pnp2=P1^1;
sbit pnp3=P1^2;
sbit pnp4=P1^3;
sbit D1=P2^0;
void delayms(uint);
void display(uchar,uchar);
uchar num,num1,shi,ge;
void main()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
while(1)
{
display(shi,ge);
}
}
void display(uchar shi,uchar ge)
{
P0=table[shi];
// P0=0xff;
pnp1=0;
delayms(5); //显示十位
P0=table[ge];
P0=0xff;
pnp1=1;
pnp2=0;
// P0=0xff;
delayms(5); //显示ge位
//pnp2=1;
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
if(num==60)
num=0;
shi=num/10;
ge=num%10;
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
|