標(biāo)題:
有人能不能幫忙看一下這個(gè)數(shù)碼管秒表為什么錯(cuò)了
[打印本頁]
作者:
wsn495682877
時(shí)間:
2018-12-26 22:19
標(biāo)題:
有人能不能幫忙看一下這個(gè)數(shù)碼管秒表為什么錯(cuò)了
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define PIN0 P0 //êyÂë1ü¶ÎÑ¡¶Ë
#define PIN1 P1 //êyÂë1üλѡ¶Ë
sbit start=P2^7; //Æô¶ˉ/ÔYí£°′Å¥
sbit reset=P2^6; //¸′λ°′Å¥
uint cnt=0; //1sμÄ′ÎêyμļÆêyÖμ
uint num=0; //½øèëÖD¶Ï′ÎêyμļÆêyÖ죨ò»′Î50ms£©
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
//2»′øD¡êyμãμÄ12òõ¼«êyÂë1ü¶ÎÂë0-9
void Display(uint a,uint b,uint c,uint d); //éùÃ÷ÏÔê¾oˉêy
void InitTimer0(); //éùÃ÷¶¨ê±Æ÷3õê¼»ˉoˉêy
void Delayms(uint x); //éùÃ÷Ñóê±oˉêy
void main()
{
uint g,s,b,q=0;
//òà′ÎêǸöê®°ùǧ
InitTimer0(); //3õê¼»ˉ¶¨ê±Æ÷
while(1) //½øèëËàÑ-»·
{
if(start==0) //¼ì2aÆô¶ˉ/ÔYí£¼üêÇ·ñ°′ÏÂ
Delayms(20); //Ñóê±Ïû¶¶
{
if(start==0) //Ïû¶¶Ö®oóÔù′μì2a
{
TR0=!TR0; //¶¨ê±Æ÷μÄ¿ØÖÆÎ»è¡·′
while(!start); //μè′y°′¼üêí·Å
}
}
if(reset==0) //¼ì2a¸′λ¼üêÇ·ñ°′ÏÂ
{
Delayms(20); //Ñóê±Ïû¶¶
if(reset==0) //Ïû¶¶Ö®oóÔù′μì2a
{
num=0;
cnt=0; //ÃëμļÆêyÖμÇå0
while(!reset); //μè′y°′¼üêí·Å
}
}
if(num>=20) //ÅD¶Ï¼Æê±ê±¼äêÇ·ñ′ïμ½1s£¨20¸ö50ms£©
{
num=0; //½øèëÖD¶Ï′ÎêyÖμÖÃ0
cnt++; //ÃëμļÆêyÖμ¼ó1
if(cnt>=9999) //ÅD¶ÏêÇ·ñ′ïμ½9999s
{
TR0=!TR0; //′ïμ½9999sÔò1رն¨ê±Æ÷2¢ÇåáãËùóDμļÆêyÖμ
num=0;
cnt=0;
}
}
g=cnt%10; //′óÃëμļÆêyÖμàïÃæ·ÖàëÃëμĸöλ
s=cnt/10%10; //′óÃëμļÆêyÖμàïÃæ·ÖàëÃëμÄê®Î»
b=cnt/100%10; //′ó·ÖμļÆêyÖμàïÃæ·Öàë·Öμĸöλ
q=cnt/1000%10;
Display(g,s,b,q); //ÏÔê¾Õa4¸öêy
}
}
void InitTimer0() //¶¨ê±Æ÷3õê¼»ˉoˉêy
{
TMOD=0x01; //Ñ¡Ôñ¶¨ê±Æ÷0μÄ1¤×÷·½ê½1
TH0=(65536-45872)/256; //×°3õÖ죨¶¨ê±50ms£©,¾§Õñ11.0592MHz
TL0=(65536-45872)%256;
EA=1; //′ò¿a×üÖD¶Ï
ET0=1; //′ò¿a¶¨ê±Æ÷ÖD¶Ï
TR0=0; //Ïè2»òaÆô¶ˉ¶¨ê±Æ÷
}
void TIMER0() interrupt 1 //¶¨ê±Æ÷ÖD¶Ï·tÎñoˉêy
{
TH0=(65536-45872)/256; //֨װ3õÖμ
TL0=(65536-45872)%256;
num++; //èýøèëÖD¶Ï′ÎêyÖμ¼ó1£¬óÃóúÅD¶ÏêÇ·ñ′ïμ½1s
}
void Delayms(uint x) //Ñóê±xms
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void Display(uint a,uint b,uint c,uint d) //¶¨òåÏÔê¾oˉêy
{
PIN0=table[a]; //ÃëμĸöλμĶÎÑ¡
PIN1=0x0e; //ÃëμĸöλμÄλѡ
Delayms(5);
PIN0=table[b]; //ÃëμÄê®Î»μĶÎÑ¡
PIN1=0x0d; //ÃëμÄê®Î»μÄλѡ
Delayms(5);
PIN0=table[c]; //·ÖμĸöλμĶÎÑ¡
PIN1=0x0b; //·ÖμİùλμÄλѡ
Delayms(5);
PIN0=table[d]; //·ÖμÄê®Î»μĶÎÑ¡
PIN1=0x07; //·ÖμÄǧλμÄλѡ
Delayms(5);
}
作者:
殺死比亞
時(shí)間:
2018-12-27 09:14
void InitTimer0() //?¨ê±?÷3?ê??ˉoˉêy
{
TMOD=0x01; //?????¨ê±?÷0μ?1¤×÷·?ê?1
TH0=(65536-45872)/256; //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
TL0=(65536-45872)%256;
EA=1; //′ò?a×ü?D??
ET0=1; //′ò?a?¨ê±?÷?D??
TR0=0; //?è2?òa???ˉ?¨ê±?÷
}
改為void InitTimer0() interrupt 1 //沒有“interrupt ”
{
// TMOD=0x01; //定時(shí)器的方式寫在主函數(shù)里面,這里可以不用再寫
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
// EA=1; //總中斷也是寫在主函數(shù)里面
// ET0=1; //′這些都應(yīng)該寫在主函數(shù)里面?
// TR0=0; //寫在主函數(shù)里面
}
作者:
殺死比亞
時(shí)間:
2018-12-27 09:17
void InitTimer0() //?¨ê±?÷3?ê??ˉoˉêy
{
TMOD=0x01; //?????¨ê±?÷0μ?1¤×÷·?ê?1
TH0=(65536-45872)/256; //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
TL0=(65536-45872)%256;
EA=1; //′ò?a×ü?D??
ET0=1; //′ò?a?¨ê±?÷?D??
TR0=0; //?è2?òa???ˉ?¨ê±?÷
}
改為
void InitTimer0() interrupt 1 //“interrupt 1”是寫中斷函數(shù)必不可少的
{
TMOD=0x01; // 方式應(yīng)該寫在主函數(shù)里面
TH0=(65536-45872)/256; //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
TL0=(65536-45872)%256;
EA=1; //′總中斷也應(yīng)該寫在主函數(shù)里?
ET0=1; //寫在主函數(shù)里面
TR0=0; //?寫在主函數(shù)里面
}
作者:
殺死比亞
時(shí)間:
2018-12-27 09:20
具體是什么情況
作者:
1092648746
時(shí)間:
2018-12-27 11:01
大哥,能轉(zhuǎn)換下編碼再發(fā)上來嗎?注釋全都亂碼,這樣看很辛苦……
然后描述下具體現(xiàn)象?
作者:
jll586
時(shí)間:
2018-12-27 11:41
if(reset==0)
{
Delayms(20);
if(reset==0)
{
num=0;
cnt=0;
while(!reset);
}
既然是重設(shè)就應(yīng)該將定時(shí)器關(guān)閉
if(start==0)
Delayms(20);
{
if(start==0)
{
TR0=!TR0;
while(!start);
}
}
當(dāng)在到這里時(shí)候本來定時(shí)器就開著,按一下開始鍵又給定時(shí)器關(guān)了
之前我也寫過秒表的,其中延時(shí)函數(shù)也特別重要,延時(shí)不對也會(huì)造成各種困擾
作者:
周超然
時(shí)間:
2018-12-27 12:44
把keil設(shè)置下,百度網(wǎng)上有,簡體中文的在發(fā)上來給大家解決
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1