應廣微控制器應用之 數碼管驅動

2021-10-12 04:56:31 字數 3559 閱讀 1001

在微控制器應用中,數碼管是經常用的是器件之一.如果把乙個簡單的微控制器系統看成是一台電腦,那麼數碼管就相當於一台電腦的顯示器.現用乙個2位半的數碼管做個範例,迴圈顯示0-199,稍作改造就可以做成乙個計算器.使用8pin數碼管,採用掃瞄方式驅動,4*4,正好16段.微控制器使用pms152,不多說上**.

實際顯示效果

#include "extern.h"

bit        com1             :pb.0;/*pin8*/

bit        com2             :pb.1;/*pin1*/

bit        com3            :pb.2;/*pin6*/

bit        com4            :pb.3;/*pin3*/

bit        seg1             :pb.4;/*pin7*/

bit        seg2             :pb.5;/*pin5*/

bit        seg3            :pb.6;/*pin4*/

bit        seg4            :pb.7;/*pin2*/

/*顯示變數區域*/

byte uclcdcomvoltsw;

byte uchun;

byte ucten;

byte ucone;

bit  sb2:uchun.1;

bit  sc2:uchun.2;

bit  sa0:ucten.0;

bit  sb0:ucten.1;

bit  sc0:ucten.2;

bit  sd0:ucten.3;

bit  se0:ucten.4;

bit  sf0:ucten.5;

bit  sg0:ucten.6;

bit  sh0:ucten.7;

bit  sa1:ucone.0;

bit  sb1:ucone.1;

bit  sc1:ucone.2;

bit  sd1:ucone.3;

bit  se1:ucone.4;

bit  sf1:ucone.5;

bit  sg1:ucone.6;

bit  sh1:ucone.7;

/*系統時鐘變數*/

bit     flag_nms;/*定時時間是否到了cinit*/

word    ussystick;

byte    count;/*     count區*/

word    t16counter;/*定時器初始化cinit*/

word    usmstmr;

byte     ucvoltchgtmr; 

byte     ucvoltperc;

/*系統變數*/

word    point;

/*演算法變數*/

byte    div_src, div_val, div_res;

void    byte_div_byte (void)

while (! div_cnt.3);

}/* 共陽led表,共陰取反即可*/

void readledtab ( void )

}/***************************************/

void    time16_init(void)

/*顯示百分比*/

void dispvoltperc(void)

else

/*把電壓值變成0-99之間的值*/  

div_src=ucvoltperc;

div_val=100;

byte_div_byte();

div_src=div_res;

div_val=10;

byte_div_byte();

/*10 位*/

a=(div_src+1);

readledtab();

/*儲存當前值*/

uctemp=a;

/*輸出為0*/

if(uctemp==0x3f)

/*十位為0,且最高位為0*/

else

}else

/*個位*/

a=div_res+1;

readledtab();

ucone=~a;

}void    fppa0 ( void )

switch(uclcdcomvoltsw)

else

if(sb0)

else

if(sc0)

else

if(sd0)

else

break;

case 1:

seg1=1;

seg2=1;

seg3=1;

seg4=1;

#if 0

com1=1;

com2=0;

com3=1;

com4=1;

#endif

#if 1

com1=0;

com2=1;

com3=0;

com4=0;

#endif

if(sf0)

else

if(sg0)

else

if(se0)

else

if(sb2)

else

break;

case 2:

seg1=1;

seg2=1;

seg3=1;

seg4=1;

#if 0

com1=1;

com2=1;

com3=0;

com4=1;

#endif

#if 1

com1=0;

com2=0;

com3=1;

com4=0;

#endif

if(sa1)

else

if(sb1)

else

if(sc1)

else

if(sd1)

else

break;

case 3:

seg1=1;

seg2=1;

seg3=1;

seg4=1;

#if 0

com1=1;

com2=1;

com3=1;

com4=0;

#endif

#if 1

com1=0;

com2=0;

com3=0;

com4=1;

#endif

if(sf1)

else

if(sg1)

else

if(se1)

else

if(sc2)

else

break;

default:

break;}}

void    interrupt ( void )

else

}popaf;

}

微控制器驅動數碼管

數碼管的原理?數碼管是分段控制點亮和熄滅的led段,數碼管分為共陽極以及共陰極,共陽極就是說數碼管的led段共乙個電壓正極,共陰極就是說所有的led段共乙個電壓負極。一般方法,乙個io控制公共段,共陽極為例子,給公共段施加乙個正電壓,其餘led段由io分開控制,想顯示多少,只需點亮對應的led段,即...

應廣微控制器應用之 呼吸燈

在很多的微控制器方案應用中,很多都會用到到指示燈,比如流水燈,rgb七彩燈,對了還有呼吸燈.現在用pms150c做個demo,稍作修改就可以用在pms152,pms132b燈應廣其他系列的微控制器中.不多說,上 一切盡在 中.include extern.h 定時時間是否到了cinit bit fl...

51微控制器數碼管詳解

led數碼管是由多個發光二極體封裝在一起組成 8 字型的器件,引線已在內部連線完成,只需引出它們的各個筆劃,公共電極。led數碼管常用的段數一般為7段,有的另加乙個小數點 led數碼管根據led的接法不同,分為共陽和共陰兩類 1.共陽極數碼管 指八段數碼管的八段發光二極體的陽極 正極 都連在一起,而...