数码管问题,初学者
#include<reg52.h>#define uchar unsigned char
#define uint unsigned int
#define du P0
#define we P2
uint temp ,shi ,ge, numdu,tt ,bai ;
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0
x83,0xc6,0xa1,0x86,0x8e};
sbit control = P3^6 ;
void delay(uint z) ;
void display(uint bai ,uint shi ,uint ge) ;
void init() ;
void main()
{
init() ;
while(1)
{
if(tt==20)
{
tt=0 ;
temp ++ ;
if(temp == 100)
temp = 0 ;
bai = temp/100 ;
shi = temp%100/10 ;
ge = temp%10 ;
display(bai,shi,ge) ;
}
}
}
void init()
{
control = 0 ;
temp = 0 ;
TMOD = 0x01 ;
TH0 = (65536-50000)/256 ;
TL0 = (65536-50000)%256 ;
EA = 1 ;
ET0 = 1 ;
TR0 = 1 ;
}
void display(uint bai ,uint shi ,uint ge)
{
control = 1 ;
du = table ;
we = 0xfe ;
delay(5) ;
du = table ;
we = 0xfd ;
delay(5) ;
du = table ;
we = 0xfb ;
delay(5) ;
}
void delay(uint z)
{
uint x ,y ;
for(x = 100 ;x > 0 ;x--)
for(y = z ;y > 0 ;y--) ;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
ps:我的单片机有P3^6同时控制位选和断选,位选为P0,断选为P2
问题:三个数码管不能同时显示,只能轮流跳着显示,即使delay加长也一样,但是用两个锁存器控制断选和位选的打开管脚,复用P0管脚这种设置的单片机不会出现我的情况。求解决办法?? 那是你位选送数据的问题啊 raxb 发表于 2012-4-16 16:22 static/image/common/back.gif
那是你位选送数据的问题啊
但是送数据的时候不是因为时间极短而感觉不到数码管的变化吗? 炎魔1206 发表于 2012-4-16 17:58 static/image/common/back.gif
但是送数据的时候不是因为时间极短而感觉不到数码管的变化吗?
该送什么就送什么 请楼主先了解一下动态扫描的过程 本帖最后由 炎魔1206 于 2012-4-17 23:36 编辑
raxb 发表于 2012-4-16 18:19 static/image/common/back.gif
该送什么就送什么
再请问下,为什么这种单片机用类似上诉的方法不会出现这种问题呢??谢谢 没太明白楼主的意思,数码管动态显示不难。你最好查下你用的锁存器的资料。 锁存器设置有问题
如果位选同时置位的haunted应该是不可以的吧。
页:
[1]