打印
[STM32]

刚开始学习数码管,为什么不能按照设定的显示呢?

[复制链接]
1241|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xichandoujigu|  楼主 | 2017-12-12 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想显示7777,用的数码管是四位一体数码管LG5641BH共阳,单片机是stc12C052AD。
代码如下:

#include <REG51.H>
unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };

sbit P37=P3^3;
sbit P36=P3^4;
sbit P35=P3^5;
sbit P34=P3^7;

void delay()
{
  int g;
   for(g=70;g>0;g--);}

  /*********主程序********************/
void main() {
P34=0;  
P1=Tab[7]; delay();  
P34=1;  

  P35=0;  
P1=Tab[7]; delay();  
P35=1;  

  P36=0;  
P1=Tab[7]; delay();  
P36=1;  

  P37=0;  
P1=Tab[7]; delay();  
P37=1;  

                }

但实际上显示的不是数字,是乱码。

请大家多指教。



相关帖子

沙发
xichandoujigu|  楼主 | 2017-12-12 20:24 | 只看该作者
#include <REG51.H>
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit P37=P3^3;
sbit P36=P3^4;
sbit P35=P3^5;
sbit P34=P3^7;

void delay()
{
  int g;
   for(g=210;g>0;g--);}

  /*********主程序********************/
void main() {

while(1)
{
P34=0;  
P1=Tab[5]; delay(); ;

P34=1;  
P1 = 0XFF;

  P35=0;  
P1=Tab[4]; delay();

P35=1;  
  P1 = 0XFF;

  P36=0;  
P1=Tab[3]; delay();         ;
P36=1;  
  P1 = 0XFF;

  P37=0;  
P1=Tab[2]; delay(); ;
P37=1;  
  P1 = 0XFF;       
                }
                   }


改进了下,但是还是存在一个问题,显示同样多的数字可以显示,比如显示1111,2222,3333可以,但是显示不同的数字就不行,比如上面的应该显示5432,但是显示的是44()4,空格是什么都没显示。

使用特权

评论回复
板凳
fengfeng的恒| | 2017-12-13 11:38 | 只看该作者
延时再加长一点?最好还是用函数封装一下。

使用特权

评论回复
地板
一路向北lm| | 2017-12-13 12:00 | 只看该作者
延时有点短。注意消隐

使用特权

评论回复
5
一路向北lm| | 2017-12-13 12:01 | 只看该作者
程序比较复杂的时候需要把数码管的显示程序放到中断里面。

使用特权

评论回复
6
一事无成就是我| | 2017-12-13 19:46 | 只看该作者
你列线都不关,不乱码那才怪

使用特权

评论回复
7
zhaor| | 2017-12-14 09:30 | 只看该作者
xichandoujigu 发表于 2017-12-12 20:24
#include
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

是STC12C2052AD吗?我刚才看手册,它是木有P36的。不知道你硬件怎么连接的呢?

使用特权

评论回复
8
xichandoujigu|  楼主 | 2017-12-15 08:50 | 只看该作者
zhaor 发表于 2017-12-14 09:30
是STC12C2052AD吗?我刚才看手册,它是木有P36的。不知道你硬件怎么连接的呢? ...

是没有3.6,我定义的是sbit   p3.6=p3^4。

使用特权

评论回复
9
ningling_21| | 2017-12-15 16:55 | 只看该作者
xichandoujigu 发表于 2017-12-15 08:50
是没有3.6,我定义的是sbit   p3.6=p3^4。

1楼和2楼数码管的段码表有两种,你的到底是哪种?

使用特权

评论回复
10
18027081573| | 2017-12-15 17:04 | 只看该作者
1楼和2楼数码管的段码表有两种,你的到底是哪种?

使用特权

评论回复
11
xichandoujigu|  楼主 | 2017-12-18 09:26 | 只看该作者
18027081573 发表于 2017-12-15 17:04
1楼和2楼数码管的段码表有两种,你的到底是哪种?

改进后用的是
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

使用特权

评论回复
12
xichandoujigu|  楼主 | 2017-12-18 10:29 | 只看该作者
一事无成就是我 发表于 2017-12-13 19:46
你列线都不关,不乱码那才怪

列线怎么关啊?谢谢!

使用特权

评论回复
13
bearlinux| | 2017-12-18 17:59 | 只看该作者
首先数码管要显示必然涉及  位选、段选。程序中要注意位选、段选开关,也可以试一试在P34=0下加P35=1,P36=1,P37=1,同样在P35=0..P36=0. P37=0下加对应的。。同时延时你可以先搞个几秒的时间,看一下效果,双重for循环,在慢慢调短。延时过短,数码管有余光。

使用特权

评论回复
14
xichandoujigu|  楼主 | 2017-12-23 17:21 | 只看该作者
谢谢大家,问题解决,数码管是共阳的,把 P1 = 0XFF改成0x00就行了。

使用特权

评论回复
15
zqx1000| | 2018-4-10 22:31 | 只看该作者
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

96

帖子

2

粉丝