针对数码管显示的原理和编程应用

一、原理

原理很简单

如图,P0是共用引脚对应段码和位码,Y6和Y7分别对应数码管的位和段,只要把需要的值赋值给P0,然后再将P2对应的Y6和Y7使能端打开就可以实现数码管的显示。

二、编程

void Seg_Tran(unsigned char *seg_string,unsigned char *seg_buf)
{
    unsigned char i=0,j=0,temp;//buf[i]=buf[0~7],seg_string[j]=seg_string[0~10]
                                                        
    for(i=0;i<=7;i++,j++)
        {
                switch(seg_string[j])
                {
                        case '0':    temp=0xc0;break;
                        case '1':    temp=0xf9;break;
                        case '2':    temp=0xa4;break;
                        case '3':    temp=0xb0;break;
                         case '4':    temp=0x99;break;
                        case '5':    temp=0x92;break;
                        case '6':    temp=0x82;break;
                        case '7':    temp=0xf8;break;
                        case '8':    temp=0x80;break;
                        case '9':    temp=0x90;break;
                    
                        case 'A':    temp=0x88;break;
                        case 'B':    temp=0x83;break;
                        case 'C':    temp=0xC6;break;
                        case 'D':    temp=0xA1;break;
                         case 'E':    temp=0x86;break;
                        case 'F':    temp=0x8E;break;
                    
                        case 'H':    temp=0x89;break;
                        case 'L':    temp=0xC7;break;
                        case 'N':    temp=0xC8;break;
                        case 'P':    temp=0x8C;break;
                        case 'U':    temp=0xC1;break;
                        
                        case '_':    temp=0xBF;break;
                        case ' ':    temp=0xFF;break;
                        
                        default : temp=0xFF;break;
                        
                }
                if(seg_string[j+1]=='.')
                {
                    temp &=0x7f;
                    j++;
                }    
                seg_buf[i]=temp;
        }

首先是把所需的字符转转换为数组中以十六进制保存,如果有.就把0x7f赋值给所需的temp,以便后面显示用。

void Seg_Disp(unsigned char *seg_buf,unsigned char pos)    
{
        P0=0xff;                        //ÏûÒþ
        P2=P2 & 0X1F | 0XE0;//ѡͨY7£¬¼´¶ÎÂëËø´æÆ÷ 111
        P2 &=0X1F;                    //¹Ø±ÕËø´æÆ÷
    
        P0=1<<pos;                    //½«¶ÎÂëËÍÈë
        P2=P2 & 0X1F | 0XC0;//ѡͨY6£¬¼´¶ÎÂëËø´æÆ÷ 110
        P2 &=0X1F;                    //¹Ø±ÕËø´æÆ÷
    
        P0=~seg_buf[pos];        //½«¶ÎÂëËÍÈë
        P2=P2 & 0X1F | 0XE0;//ѡͨY7£¬¼´¶ÎÂëËø´æÆ÷ 111
        P2 &=0X1F;                    //¹Ø±ÕËø´æÆ÷
    
}
显示数码管,像将P0口消隐,打开Y7,再关闭,之后再位选,1一直往左移,选8位,打开Y6,再进行段选,将转换后的数组赋值给P0,打开Y7,就可以完成数码管的显示了。

        

主函数,定义数组和字符串

%u为整数

主函数放字符串的转换

利用定时器1实现数码管的亮灭

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值