打印

关于单片机控制单只数码管显示的疑问

[复制链接]
3549|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jd吕凯|  楼主 | 2010-7-29 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jd吕凯 于 2010-7-29 11:07 编辑

因为当时买材料时什么也不懂,买了一只共阴两位数码管。准备练习一下单片机控制数码管显示00~99。于是找来资料开始看单片机显示一位数码管的程序(也是在这个21IC上下载的)。现在把程序贴上来:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};
void DelayMS(uint x)
{
  uchar t;
while(x--)
for(t=120;t>0;t--);
}
void main()
{
  uchar i=0;
P0=0x00;
while(1)
{
   P0=~DSY_CODE
;
  i=(i+1)%10;/*显示0-9*/
  DelayMS(200);
}
}

让我疑惑的是uchar code DSY_CODE[]=
{
  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};我把这个表示段码的数组里的16进制数转化为2进制时觉得跟要在数码管上显示的0~9没法对应起来,电路图里的数码管是共阴的。再说也是直接连在单片机的P0口上的。不过在proteus上这个数码管显示是正常的。而我在之前的理解是,如果把数码管对应的8个LED,按网上说的那样编号即a,b,c,d,e,f,g,dp与P0口的P0.7~P0.0对应连接起来,数组里的十六进制数应该是这样的:{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,


0x7F,0x6F}这样转化出来的2进制是0011 1111——》数码管:0, 0000 0110——》数码管:1,……0110 1111——》9。可我这样修改后编译产生的.hex加到proteus里仿真却是乱码的。

所以我现在的问题就是我贴上来的那个程序里的数组中的数是怎样跟数码管对应起来的?????

相关帖子

沙发
zjswuyunbo| | 2010-7-29 09:49 | 只看该作者
P0=~DSY_CODE;
  i=(i+1)%10;/*显示0-9*/

????

使用特权

评论回复
板凳
土憋ㄘ`| | 2010-7-29 10:20 | 只看该作者
gggggggggggggg

使用特权

评论回复
地板
土憋ㄘ`| | 2010-7-29 10:21 | 只看该作者
数码管这东西都要纠结................比我还菜,我都够菜的了

使用特权

评论回复
5
smile_luo| | 2010-7-29 10:28 | 只看该作者
......

使用特权

评论回复
6
jd吕凯|  楼主 | 2010-7-29 10:32 | 只看该作者
楼上的高手,既然你知道为什么不帮我解释一下呢?
答2#:是P0=~DSY_CODE[i];i=(i+1)%10;/*显示0-9*/
这你应该能看出来啊!
在线等!因为我已经想了好几天了,让大家见笑了,所以我觉得有问的必要。

使用特权

评论回复
7
lbx_00| | 2010-7-29 11:37 | 只看该作者
电路图

使用特权

评论回复
8
jd吕凯|  楼主 | 2010-7-29 13:15 | 只看该作者
怎么上传图片啊?我在高级回复里上传了jpg的附件竟然提示无效的图片文件!
那个就是proteus里的电路图,一个数码管连接着单片机的P0的七个口,还有一个因为不用显示小数点没用。两者之间并没有什么其他什么译码芯片啊。

使用特权

评论回复
9
sophya| | 2010-7-29 13:23 | 只看该作者
共阳码和共阴码是什么关系需要搞清楚.
另外还需要仔细阅读下人家的代码.

使用特权

评论回复
10
欧阳青云| | 2010-8-1 17:46 | 只看该作者
你要知道数码管有共阴和共阳两种情况,不同的情况那个数组中的数据就不一样,但两个是位相反。还有你说的会出现乱码可能是没有消隐。如果是共阴的while(1)中第一句加一句:P0=0X00;共阳则加:P0=0XFF;

使用特权

评论回复
11
543769898| | 2010-8-1 18:15 | 只看该作者
一看就跟教材的程序差不多  一个老工程师 成告诉过我  延迟不要用delay  最好用定时器

使用特权

评论回复
12
xw802| | 2010-8-15 10:58 | 只看该作者
关键就是这条取反语句:P0=~DSY_CODE;
uchar code DSY_CODE[]给出的是共阳极显示的数值

使用特权

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

本版积分规则

0

主题

169

帖子

1

粉丝