标题: 单片机共阴双8实现0-99秒表 编译ok,但是无法点亮 [打印本页]

作者: yangwenwuab    时间: 2021-9-14 20:37
标题: 单片机共阴双8实现0-99秒表 编译ok,但是无法点亮
#include<reg52.h>        
unsigned char code ledchar[10]={                  
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x0f,0x6f};                     
unsigned char ledbuff[2]={0xff,0xff};
unsigned char i=0;     
unsigned int cnt=0;   
unsigned char flag1s=0;                        
void main()
{
unsigned int sec = 0;  
EA=1;
TMOD=0x01;            
TH0=0xfC;              
TL0=0x67;
ET0=1;
TR0=1;
while(1)
{
  if(flag1s==1)      
  {
   flag1s=0;
   sec++;
        ledbuff[0]=ledchar[sec%10];
        ledbuff[1]=ledchar[sec/10%10];
   }
}
}
void yb() interrupt 1
{
TH0=0xfC;              
TL0=0x67;
cnt++;
if(cnt>=1000)
{
  cnt=0;
  flag1s=1;
}
P0=0x00;
switch(i)
{
  case 0:P1=0xfe;i++;P0=ledbuff[0];break;
  case 1:P1=0xfd;i=0;P0=ledbuff[1];break;
  default:break;
}
}

此程序运行OK,但是无法点亮,请高手指点那里有问题,谢谢啦!



作者: lkc8210    时间: 2021-9-14 22:03
既然无法点亮,又如何得知程序运行OK?
作者: 188610329    时间: 2021-9-14 22:04
看你的代码
TH0=0xfC;              
TL0=0x67;
以及
TMOD=0x01;         
你用的应该是 11.0592晶振 + 89C51的单片机
那么, P0 口 是没有高电平输出的,你必须要给P0口加上上拉电阻才能点亮数码管。

作者: wulin    时间: 2021-9-14 22:30
P0要接上拉电阻。段码数组有误。
  1. #include<reg52.h>        
  2. unsigned char code ledchar[10]={                  
  3. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                     
  4. unsigned char ledbuff[2]={0x3f,0x3f};
  5. unsigned char i=0;     
  6. unsigned int cnt=0;   
  7. unsigned char flag1s=0;                        
  8. void main()
  9. {
  10.         unsigned int sec = 0;  
  11.         EA=1;
  12.         TMOD=0x01;            
  13.         TH0=0xfC;              
  14.         TL0=0x67;
  15.         ET0=1;
  16.         TR0=1;
  17.         while(1)
  18.         {
  19.                 if(flag1s==1)      
  20.                 {
  21.                         flag1s=0;
  22.                         sec=++sec%60;
  23.                         ledbuff[0]=ledchar[sec%10];
  24.                         ledbuff[1]=ledchar[sec/10%10];
  25.                 }
  26.         }
  27. }
  28. void yb() interrupt 1
  29. {
  30.         TH0=0xfC;              
  31.         TL0=0x67;
  32.         cnt++;
  33.         if(cnt>=1000)
  34.         {
  35.           cnt=0;
  36.           flag1s=1;
  37.         }
  38.         P0=0x00;
  39.         switch(i)
  40.         {
  41.                 case 0:P1=0xfe;i++;P0=ledbuff[0];break;
  42.                 case 1:P1=0xfd;i=0;P0=ledbuff[1];break;
  43.                 default:break;
  44.         }
  45. }
复制代码

作者: npn    时间: 2021-9-14 23:02
188610329 发表于 2021-9-14 22:04
看你的代码
TH0=0xfC;              
TL0=0x67;

上拉电阻是STC89等老型号才需要,现在的STC8都是寄存器控制的。
作者: man1234567    时间: 2021-9-15 08:26
编译ok只表示程序结构和命令格式等全部符合编程规范,属于political correctness。
至于是否能点亮或达到设计要求,要看程序内容及硬件接连等,属于措施得当。
最后说一下程序运行OK,低一层意思是程序能运行无阻碍就OK,高一层次是按照设计目标出结果OK。
目前看来你的程序只在低层次OK(编译ok)而已,高一层次包括程序和硬件(仅软件呵呵)都OK才可以。
作者: 188610329    时间: 2021-9-15 21:50
npn 发表于 2021-9-14 23:02
上拉电阻是STC89等老型号才需要,现在的STC8都是寄存器控制的。

他头文件 是:Reg52.h  
TMOD = 0x01;

你说,除了说明他用的是 STC89C52, STC90C52 这类,还能是什么?

STC8 的话,更不谈了,他连 PxMx 的设置都没,想点亮LED?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1