用
单片机进行0到59秒动态扫描显示,
仿真老是不对啊,程序改了很多次,基本上还是有问题,憋的慌
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dl=P2^6;
sbit wl=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar count,sec,min;
void delay(uint);
void main()
{
TMOD=0x01;
TL0=0x4c;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
P0=table[sec];
dl=1;
dl=0;
P0=0xfe;
wl=1;
wl=0;
delay(10);
P0=table[min];
dl=1;
dl=0;
P0=0xfd;
wl=1;
wl=0;
delay(10);
if(count==20)
{
count=0;
sec++;
}
if(sec==60)
{
sec=0;
min++;
}
if(min==60)
{
min=0;
}
}
/********************************/
void delay(uint i)
{
uint j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
/********************************************/
void
time0()interrupt 1
{
TL0=0x4c;
TH0=0x00;
count++;
}
-
仿真的时候乱码啊,各种乱码~~
这个在仿真和实际存在一定的差距我原来遇到这个问题你可以试试。
数码管是共阴的,码段正确,程序我又改动了一下,可以计数了,就是显示有问题,设置延迟大时,交替显示,延迟小时,显示不全。。。。。。用的仿真电路就是郭天祥的。。。。。
我试着改动段选和位选,现在可以显示,但有个神奇的现象,到个别数字时不显示,然后又正常了。。。。程序如下,求达人可以仿真一下。。。。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dl=P2^6;
sbit wl=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar count,sec,min;
void delay(uint);
void scan();
void main()
{
TMOD=0x01;
TL0=0x4c;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
while(1)
{
scan ();
}
}
/**************动态扫描******************/
void scan ()
{
wl=1;
P0=0xfe;
wl=0;
dl=1;
P0=table[min];
dl=0;
delay(20);
wl=1;
P0=0xfd;
wl=0;
dl=1;
P0=table[sec];
dl=0;
delay(20);
}
/**********************延迟**********************/
void delay(uint i)
{
uint j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
/*********************中断***********************/
void time0()interrupt 1
{
TL0=0x4c;
TH0=0x00;
count++;
if(count==20)
{
count=0;
sec++;
}
if(sec==10)
{
sec=0;
min++;
}
if(min==6)
{
min=0;
}
}
一周热门 更多>