日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【单片机基础】单片机数码管驱动函数(三极管驱动)

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【单片机基础】单片机数码管驱动函数(三极管驱动) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將單片機數碼管顯示驅動封裝成一個函數,方便需要用到的時候直接調用

  • 1、數碼管電路原理圖及原理
  • 2、數碼管碼表
  • 3、位選IO管腳定義
  • 4、延時函數
  • 5、動態顯示一位數碼管
  • 6、動態顯示兩位數碼管
  • 7、動態顯示三位數碼管
  • 8、動態顯示四位數碼管
  • 9、主函數調用示例

1、數碼管電路原理圖及原理

電路圖(圖一)

數碼管顯示原理(圖二)

數碼管根據內部連接不同,分為共陰極和共陽極。八段數碼管內部有8顆LED組成,如果想要顯示特定字形只需控制相應的LED亮起,其他LED熄滅即可。

數碼管顯示方式有兩種:靜態顯示和動態顯示

靜態顯示每個數碼管端口都必須接上數據IO口來保持顯示。當送入字形可一直保持,直到送入新字形為止。
優點:數碼管顯示無閃爍、亮度高、軟件控制比較容易。
缺點:需要的硬件電路較多,如果數碼管增多,當數碼管全部被電量的時候,所需要的電流會增大,對電源的要求也隨之增加。所以,大部分硬件設計中,很少采用靜態顯示的方式。

動態顯示:所有位的數碼管段選線并聯在一起,由位選線進行動態掃描,控制是哪一位數碼管有效。所謂動態掃描顯示就是輪流向各位數碼管送出字形碼和相應的位選,利用發光數碼管的余暉和人眼視覺殘留的作用,使人感覺好像各位數碼管同時都在顯示。

擴展:眼睛的另一個重要特性是視覺惰性,即光象一旦在視網膜上形成,視覺將會對這個光象的感覺維持一個有限的時間,這種生理現象叫做視覺暫留性,對于中等亮度的光刺激,視覺暫留時間約為0.05至0.2秒

優點:硬件簡單(數碼管越多,這個優勢越明顯),由于每個數碼管只有一個被點亮,所以數碼管消耗的電流較小。
缺點:數碼管亮度不如靜態顯示的亮度高,如果刷新率低,會出現閃爍的現象。

2、數碼管碼表

//數碼管碼表,共陽極 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 //自定義};//數碼管碼表,共陰極 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、延時函數

//注意:必須包含<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、動態顯示一位數碼管

//在數碼管顯示一位數字顯示函數, //unsigned char i 輸入0-9以內的數字 void disply_one_digit(unsigned char i) {P0 = leddata[i];smg4 = 0;delay_ms(5);smg4 = 1; }

6、動態顯示兩位數碼管

//在數碼管顯示兩位數字顯示函數, //unsigned char i 輸入0-99以內的數字 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、動態顯示三位數碼管

//在數碼管顯示三位數字顯示函數, //unsigned char i 輸入0-999以內的數字 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、動態顯示四位數碼管

//在數碼管顯示四位數字顯示函數, //unsigned char i 輸入0-9999以內的數字 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、主函數調用示例

void main() {while(1){ // disply_one_digit(5); // // disply_two_digit(9); // // disply_three_digit(123);disply_four_digit(1234);} }

總結

以上是生活随笔為你收集整理的【单片机基础】单片机数码管驱动函数(三极管驱动)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。