【单片机基础】单片机数码管驱动函数(三极管驱动)
將單片機(jī)數(shù)碼管顯示驅(qū)動(dòng)封裝成一個(gè)函數(shù),方便需要用到的時(shí)候直接調(diào)用
- 1、數(shù)碼管電路原理圖及原理
- 2、數(shù)碼管碼表
- 3、位選IO管腳定義
- 4、延時(shí)函數(shù)
- 5、動(dòng)態(tài)顯示一位數(shù)碼管
- 6、動(dòng)態(tài)顯示兩位數(shù)碼管
- 7、動(dòng)態(tài)顯示三位數(shù)碼管
- 8、動(dòng)態(tài)顯示四位數(shù)碼管
- 9、主函數(shù)調(diào)用示例
1、數(shù)碼管電路原理圖及原理
電路圖(圖一)
數(shù)碼管顯示原理(圖二)
數(shù)碼管根據(jù)內(nèi)部連接不同,分為共陰極和共陽(yáng)極。八段數(shù)碼管內(nèi)部有8顆LED組成,如果想要顯示特定字形只需控制相應(yīng)的LED亮起,其他LED熄滅即可。
數(shù)碼管顯示方式有兩種:靜態(tài)顯示和動(dòng)態(tài)顯示
靜態(tài)顯示每個(gè)數(shù)碼管端口都必須接上數(shù)據(jù)IO口來保持顯示。當(dāng)送入字形可一直保持,直到送入新字形為止。
優(yōu)點(diǎn):數(shù)碼管顯示無閃爍、亮度高、軟件控制比較容易。
缺點(diǎn):需要的硬件電路較多,如果數(shù)碼管增多,當(dāng)數(shù)碼管全部被電量的時(shí)候,所需要的電流會(huì)增大,對(duì)電源的要求也隨之增加。所以,大部分硬件設(shè)計(jì)中,很少采用靜態(tài)顯示的方式。
動(dòng)態(tài)顯示:所有位的數(shù)碼管段選線并聯(lián)在一起,由位選線進(jìn)行動(dòng)態(tài)掃描,控制是哪一位數(shù)碼管有效。所謂動(dòng)態(tài)掃描顯示就是輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光數(shù)碼管的余暉和人眼視覺殘留的作用,使人感覺好像各位數(shù)碼管同時(shí)都在顯示。
擴(kuò)展:眼睛的另一個(gè)重要特性是視覺惰性,即光象一旦在視網(wǎng)膜上形成,視覺將會(huì)對(duì)這個(gè)光象的感覺維持一個(gè)有限的時(shí)間,這種生理現(xiàn)象叫做視覺暫留性,對(duì)于中等亮度的光刺激,視覺暫留時(shí)間約為0.05至0.2秒。
優(yōu)點(diǎn):硬件簡(jiǎn)單(數(shù)碼管越多,這個(gè)優(yōu)勢(shì)越明顯),由于每個(gè)數(shù)碼管只有一個(gè)被點(diǎn)亮,所以數(shù)碼管消耗的電流較小。
缺點(diǎn):數(shù)碼管亮度不如靜態(tài)顯示的亮度高,如果刷新率低,會(huì)出現(xiàn)閃爍的現(xiàn)象。
2、數(shù)碼管碼表
//數(shù)碼管碼表,共陽(yáng)極 unsigned char leddata[]={ 0xC0, //"0"0xF9, //"1"0xA4, //"2"0xB0, //"3"0x99, //"4"0x92, //"5"0x82, //"6"0xF8, //"7"0x80, //"8"0x90, //"9"0x88, //"A"0x83, //"B"0xC6, //"C"0xA1, //"D"0x86, //"E"0x8E, //"F"0x89, //"H"0xC7, //"L"0xC8, //"n"0xC1, //"u"0x8C, //"P"0xA3, //"o"0xBF, //"-"0xFF, //熄滅0xFF //自定義};//數(shù)碼管碼表,共陰極 unsigned char leddata[]={ 0x3F, //"0"0x06, //"1"0x5B, //"2"0x4F, //"3"0x66, //"4"0x6D, //"5"0x7D, //"6"0x07, //"7"0x7F, //"8"0x6F, //"9"0x77, //"A"0x7C, //"B"0x39, //"C"0x5E, //"D"0x79, //"E"0x71, //"F"0x76, //"H"0x38, //"L"0x37, //"n"0x3E, //"u"0x73, //"P"0x5C, //"o"0x40, //"-"0x00, //熄滅0x00 //自定義};3、位選IO管腳定義
sbit smg1 = P2^0; sbit smg2 = P2^1; sbit smg3 = P2^2; sbit smg4 = P2^3;4、延時(shí)函數(shù)
//注意:必須包含<intrins.h>頭文件才能使用 void Delay1ms() //@11.0592MHz {unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i); }void delay_ms(unsigned int time) {unsigned int i;for(i=0; i<time; i++){Delay1ms();} }5、動(dòng)態(tài)顯示一位數(shù)碼管
//在數(shù)碼管顯示一位數(shù)字顯示函數(shù), //unsigned char i 輸入0-9以內(nèi)的數(shù)字 void disply_one_digit(unsigned char i) {P0 = leddata[i];smg4 = 0;delay_ms(5);smg4 = 1; }6、動(dòng)態(tài)顯示兩位數(shù)碼管
//在數(shù)碼管顯示兩位數(shù)字顯示函數(shù), //unsigned char i 輸入0-99以內(nèi)的數(shù)字 void disply_two_digit(unsigned char i) {unsigned char shi,ge;shi = i / 10;ge = i % 10;P0 = leddata[ge];smg4 = 0;delay_ms(5);smg4 = 1;P0 = leddata[shi];smg3 = 0;delay_ms(5);smg3 = 1; }7、動(dòng)態(tài)顯示三位數(shù)碼管
//在數(shù)碼管顯示三位數(shù)字顯示函數(shù), //unsigned char i 輸入0-999以內(nèi)的數(shù)字 void disply_three_digit(unsigned int i) {unsigned int ge,shi,bai;bai = i / 100;shi = i % 100 / 10;ge = i % 10;P0 = leddata[ge];smg4 = 0;delay_ms(5);smg4 = 1;P0 = leddata[shi];smg3 = 0;delay_ms(5);smg3 = 1;P0 = leddata[bai];smg2 = 0;delay_ms(5);smg2 = 1; }8、動(dòng)態(tài)顯示四位數(shù)碼管
//在數(shù)碼管顯示四位數(shù)字顯示函數(shù), //unsigned char i 輸入0-9999以內(nèi)的數(shù)字 void disply_four_digit(unsigned int i) {unsigned int ge,shi,bai,qian;qian = i / 1000 % 10;bai = i / 100 % 10;shi = i / 10 % 10;ge = i % 10;P0 = leddata[ge];smg4 = 0;delay_ms(5);smg4 = 1;P0 = leddata[shi];smg3 = 0;delay_ms(5);smg3 = 1;P0 = leddata[bai];smg2 = 0;delay_ms(5);smg2 = 1;P0 = leddata[qian];smg1 = 0;delay_ms(5);smg1 = 1; }9、主函數(shù)調(diào)用示例
void main() {while(1){ // disply_one_digit(5); // // disply_two_digit(9); // // disply_three_digit(123);disply_four_digit(1234);} }總結(jié)
以上是生活随笔為你收集整理的【单片机基础】单片机数码管驱动函数(三极管驱动)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Directory Opus一款功能强大
- 下一篇: 【jQuery】jQuery 教程