找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大佬帮我看看这个单片机数码管显示程序哪里出错了

[复制链接]
跳转到指定楼层
楼主
#include"reg51.h"
#include"stdio.h"
unsigned char Pos;
unsigned char number;
unsigned char i;
unsigned char NUM[10]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};
void Timer0_init  ();
void xio() ;
void display_num(unsigned char num,unsigned char Pos) ;



void main()
{
   Timer0_init ();
   while(1);
           
}

void Timer0_init  ()        
{
EA=1;
ET0=1;
TMOD=0x02;
TH0=0xfe;
TL0=0x0c;
TR0=1;
Pos=0x01;
}

void xio() interrupt 1
{
for(i=1;i<=8;i++)         
  {
   display_num(i,Pos);
   Pos=Pos<<1;
   display_num(i,0);
  }
}
                                
void display_num(unsigned char num,unsigned char Pos)
{
  if(number!=0)
   P0=NUM[num];
   P2=Pos;


}
数码管显示程序


搜狗截图20171115205914.png (108.35 KB, 下载次数: 25)

搜狗截图20171115205914.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 5#
ID:249876 发表于 2017-11-15 22:02 | 只看该作者
首先你的仿真图可以再优化一些,布线横平竖直比较美观;可以先检查一下你的八位数码管是共阴的还是共阳,数码管一定要和代码结合上,你的显示函数里面的if语句里的条件是有问题的吧!你检查一下。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

来自 6#
ID:248450 发表于 2017-11-15 22:03 | 只看该作者
void display_num(unsigned char num,unsigned char Pos)
{
  if(number!=0)
   P0=NUM[num];
   P2=Pos;


}
首先,你这个number虽然定义了,但是你并没有给它赋值。
其次,你要知道你那个中断函数,当每次触发中断时(我也就没去算你定了多长时间了),这个for循环就执行个8次,也就是会,唰的一下,显示,移位,显示。。。很快就结束了。然后,8次之后呢,你又没有给Pos重新赋值(定时器初始化只会执行一次的)。所以无论有没有显示,这个过程很快就结束了,你可能什么都观察不到。

以上,我并没有试验,只是看了一下你的代码,若有不对之处,还望见谅。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:249856 发表于 2017-11-15 21:04 | 只看该作者
求大佬帮忙看看,帮忙改改
回复

使用道具 举报

板凳
ID:249864 发表于 2017-11-15 21:20 | 只看该作者
看不懂
回复

使用道具 举报

地板
ID:248394 发表于 2017-11-15 21:44 | 只看该作者
有啥报错提示不
回复

使用道具 举报

7#
ID:126608 发表于 2017-11-16 17:06 | 只看该作者
你用了共阳的段码,就必须用pnp三极管,你却用了npn三极管。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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