在微控制器應用中,數碼管是經常用的是器件之一.如果把乙個簡單的微控制器系統看成是一台電腦,那麼數碼管就相當於一台電腦的顯示器.現用乙個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.共陽極數碼管 指八段數碼管的八段發光二極體的陽極 正極 都連在一起,而...