本人學習單片機的動態掃描 于是想自己編一個計時器,開電源后打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重新編輯 ]
