本人学习单片机的动态扫描 于是想自己编一个计时器,开电源后打00:00:00开始计时 但是问题出来了 在数码管上设置的秒位他老是不在设定的位置上显示
我把程序看了几遍但是还是不知道问题出在哪里!!
因此向广大高手求助一下,救救小虾米!
以下是程序代码·······
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar minn,miaoo,miaos,miaog,fenn,fens,
feng,shii,shis,shig;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(uint z);
main()
{
TMOD=0x01;//T0工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//计算初值
EA=1;//开放中断
ET0=1;//启动定时器中断
TR0=1;//启动定时器
while(1)
{
if(minn==10)
{
minn=0;
miaoo++;
//fenn++;
//shii++;
if(miaoo==60)
{miaoo=0;
fenn++;}
if(fenn==60)
{fenn=0;
shii++;}
if(shii==12)
{shii=0;}
miaos=miaoo/10; //计算秒十位
miaog=miaoo%10;//计算秒个位
fens=fenn/10; //计算分十位
feng=fenn%10; //计算分个位
shis=shii/10; //计算时十位
shig=shii%10; //计算时个位
}
dula=1;
P0=table[miaog];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
dula=1;
P0=table[miaos];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xef;
wela=0;
dula=1;
P0=table[feng];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[fens];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[shig];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[shis];
dula=0;
delay(5);
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
minn++;
}
最后在附件里有我在Proteus下 搭好的电路和 程序
还有一张图片
请指正
[ 此帖被atlas1191在2010-06-06 18:52重新编辑 ]