标题:
有人能不能帮忙看一下这个数码管秒表为什么错了
[打印本页]
作者:
wsn495682877
时间:
2018-12-26 22:19
标题:
有人能不能帮忙看一下这个数码管秒表为什么错了
#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);
}
作者:
杀死比亚
时间:
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; //定时器的方式写在主函数里面,这里可以不用再写
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
// EA=1; //总中断也是写在主函数里面
// ET0=1; //′这些都应该写在主函数里面?
// TR0=0; //写在主函数里面
}
作者:
杀死比亚
时间:
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”是写中断函数必不可少的
{
TMOD=0x01; // 方式应该写在主函数里面
TH0=(65536-45872)/256; //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
TL0=(65536-45872)%256;
EA=1; //′总中断也应该写在主函数里?
ET0=1; //写在主函数里面
TR0=0; //?写在主函数里面
}
作者:
杀死比亚
时间:
2018-12-27 09:20
具体是什么情况
作者:
1092648746
时间:
2018-12-27 11:01
大哥,能转换下编码再发上来吗?注释全都乱码,这样看很辛苦……
然后描述下具体现象?
作者:
jll586
时间:
2018-12-27 11:41
if(reset==0)
{
Delayms(20);
if(reset==0)
{
num=0;
cnt=0;
while(!reset);
}
既然是重设就应该将定时器关闭
if(start==0)
Delayms(20);
{
if(start==0)
{
TR0=!TR0;
while(!start);
}
}
当在到这里时候本来定时器就开着,按一下开始键又给定时器关了
之前我也写过秒表的,其中延时函数也特别重要,延时不对也会造成各种困扰
作者:
周超然
时间:
2018-12-27 12:44
把keil设置下,百度网上有,简体中文的在发上来给大家解决
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1