打印
[STM8]

关于数码管的程序我看不懂,请帮忙分析一下。

[复制链接]
1588|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zini1900|  楼主 | 2013-12-10 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zini1900 于 2013-12-10 20:06 编辑

电压表上的数码管,可显示个十百三位,我只看出PA的2,3,4位是位选。


const        uchar table_PB[]={0XCF,0XFF,0XDF,0XDF,0XEF,0XCF,0XCF,0XDF,0XCF,0XCF,0xFF,0XFF,0xef,0xef,0XCF,0XEF};
const        uchar table_PC[]={0x57,0XD7,0X67,0X47,0XC7,0X4F,0X4F,0XD7,0X47,0X47,0x6F,0XEF,0x7f,0X57,0X07,0XC7};
const        uchar table_PD[]={0XFD,0X02,0XFD,0X02,0X02,0X02,0XFD,0X02,0XFD,0X02,0xFD,0x02,0xfd,0XFD,0XFD,0XFD};

void display_b(float v,uchar bai)
{
        PB_ODR=table_PB[bai];
        PC_ODR=table_PC[bai];
        if(bai==0||bai==2||bai==6||bai==8)
                                        PD_ODR&=table_PD[bai];
        else         
                                        PD_ODR|=table_PD[bai];
        PA_ODR=0X02;
        delay(4);
        PA_ODR&=0XFD;//关闭百位数码管电源
        PB_ODR=0xff;
        PC_ODR=0xff;
        PD_ODR|=0x02;
}
沙发
cjhk| | 2013-12-10 19:49 | 只看该作者
不是很懂这一块    楼主   帮你顶一个   看看别人的意见吧    这一块   感觉了解的不多  

使用特权

评论回复
板凳
zini1900|  楼主 | 2013-12-10 23:58 | 只看该作者
没有人能看懂吗

使用特权

评论回复
地板
huiguang_1| | 2013-12-11 16:20 | 只看该作者
低手,主程序中还用delay。。。。。定时器扫描不行吗?

使用特权

评论回复
5
zini1900|  楼主 | 2013-12-11 20:08 | 只看该作者
huiguang_1 发表于 2013-12-11 16:20
低手,主程序中还用delay。。。。。定时器扫描不行吗?

pbpcpd是用来做什么的?

使用特权

评论回复
6
人民币的幻想| | 2013-12-12 10:05 | 只看该作者
楼主是不是省略了很多宏定义?

使用特权

评论回复
7
kenmy| | 2013-12-12 10:19 | 只看该作者
楼主这样只贴出部分代码的,叫我们也看不清那几个宏是干嘛的

使用特权

评论回复
8
金融小数| | 2013-12-12 10:59 | 只看该作者
从代码的结构看,这个函数是定时调用的而且是小于20ms的,否则显示不流畅了

楼主最好贴出原理图

使用特权

评论回复
9
zini1900|  楼主 | 2013-12-12 13:59 | 只看该作者
单片机是stm8的paodr这些是io输出这个程序是用来让数码管的百位显示数字的

使用特权

评论回复
10
zini1900|  楼主 | 2013-12-12 19:17 | 只看该作者
有一段相关的程序没有写
//数码管端口初始化
//////////////////////////////////////////////
  PA_DDR|=0X0E;
        PA_CR1|=0X0E;
        PA_CR2|=0X00;       
                                       
        PD_DDR|=0X8A;
        PD_CR1|=0X8A;
        PD_CR2|=0X00;
                               
        PC_DDR|=0XF8;
        PC_CR1|=0XF8;
        PC_CR2|=0X00;
                                       
        PB_DDR|=0X30;
        PB_CR1|=0X30;
        PB_CR2|=0X00;
pa的234位是位选,它是把八个段放在了pb的56位,pc的45678位,pd的2位,正好八段,table_pb里的八位数只有56位是有用的,
当百位为0268时,pd的2位被置0,百位为13579时,pd的2位被置1,也就是百位为0268时,pd的2位控制的数码管显示,因为是共阳数码管,百位为13579时,pd的2位控制的数码管不显示,只有e段在0268时显示,而13579时不显示,所以pd的2位控制的是e段,用这种方法可以分析出各段是由pb pc pd中的哪一位控制的。这个程序的前半部分是段选和位选,后半部分是将位选取消,各段都不显示。

使用特权

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

本版积分规则

31

主题

106

帖子

0

粉丝