找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1940|回复: 6
打印 上一主题 下一主题
收起左侧

单片机共阴双8实现0-99秒表 编译ok,但是无法点亮

[复制链接]
跳转到指定楼层
楼主
ID:932984 发表于 2021-9-14 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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,但是无法点亮,请高手指点那里有问题,谢谢啦!


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-9-14 22:03 来自触屏版 | 只看该作者
既然无法点亮,又如何得知程序运行OK?
回复

使用道具 举报

板凳
ID:624769 发表于 2021-9-14 22:04 | 只看该作者
看你的代码
TH0=0xfC;              
TL0=0x67;
以及
TMOD=0x01;         
你用的应该是 11.0592晶振 + 89C51的单片机
那么, P0 口 是没有高电平输出的,你必须要给P0口加上上拉电阻才能点亮数码管。
回复

使用道具 举报

地板
ID:213173 发表于 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. }
复制代码
回复

使用道具 举报

5#
ID:57657 发表于 2021-9-14 23:02 | 只看该作者
188610329 发表于 2021-9-14 22:04
看你的代码
TH0=0xfC;              
TL0=0x67;

上拉电阻是STC89等老型号才需要,现在的STC8都是寄存器控制的。
回复

使用道具 举报

6#
ID:584814 发表于 2021-9-15 08:26 | 只看该作者
编译ok只表示程序结构和命令格式等全部符合编程规范,属于political correctness。
至于是否能点亮或达到设计要求,要看程序内容及硬件接连等,属于措施得当。
最后说一下程序运行OK,低一层意思是程序能运行无阻碍就OK,高一层次是按照设计目标出结果OK。
目前看来你的程序只在低层次OK(编译ok)而已,高一层次包括程序和硬件(仅软件呵呵)都OK才可以。
回复

使用道具 举报

7#
ID:624769 发表于 2021-9-15 21:50 | 只看该作者
npn 发表于 2021-9-14 23:02
上拉电阻是STC89等老型号才需要,现在的STC8都是寄存器控制的。

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

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表