STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
生活随笔
收集整理的這篇文章主要介紹了
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
手動顯示
#include <reg52.h>//包含51頭文件 #include <intrins.h>//包含移位標準庫函數頭文件#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//數碼管段選 sbit WE = P2^7;//數碼管段選//共陰數碼管段選表0-9 uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*==================================== 函數 : delay(uint z) 參數 :z 延時毫秒設定,取值范圍0-65535 返回值 :無 描述 :12T/Fosc11.0592M毫秒級延時 ====================================*/ void delay(uint z) {uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--); } /*==================================== 描述 :兩位共陰數碼管動態(tài)顯示 ====================================*/ void display(uchar num1, uchar num2) {/*第一位顯示*/ P0 = 0XFF;//清除斷碼WE = 1;//打開位選鎖存器P0 = 0XFE; //1111 1110WE = 0;//鎖存位選數據DU = 1;//打開段選鎖存器P0 = tabel[num1];//DU = 0;//鎖存段選數據delay(1);/*第二位顯示*/P0 = 0XFF;//清除斷碼WE = 1;//打開位選鎖存器P0 = 0XFD; //1111 1101WE = 0;//鎖存位選數據DU = 1;//打開段選鎖存器P0 = tabel[num2];//DU = 0;//鎖存段選數據delay(1);}void main()//main函數自身會循環(huán) { while(1){ display(0, 0); //數碼管顯示函數} }說明:
由于傳參的緣故,顯示 00——10 共 11 個數字只需要調用
自定義的函數void display(uchar num1, uchar num2)
依次傳入:
所以以上其它代碼不再復制。
自動顯示
#include <reg52.h>//包含51頭文件 #include <intrins.h>//包含移位標準庫函數頭文件#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//數碼管段選 sbit WE = P2^7;//數碼管段選 uchar count = 0; // 控制數碼管顯示的變量 uchar i = 0; // 控制循環(huán)次數的變量//共陰數碼管段選表0-9 uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*==================================== 函數 : delay(uint z) 參數 :z 延時毫秒設定,取值范圍0-65535 返回值 :無 描述 :12T/Fosc11.0592M毫秒級延時 ====================================*/ void delay(uint z) {uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--); } /*==================================== 描述 :兩位共陰數碼管動態(tài)顯示 ====================================*/ void display(uchar num1, uchar num2) {/*第一位顯示*/ P0 = 0XFF;//清除斷碼WE = 1;//打開位選鎖存器P0 = 0XFE; //1111 1110WE = 0;//鎖存位選數據DU = 1;//打開段選鎖存器P0 = tabel[num1];//DU = 0;//鎖存段選數據delay(1);/*第二位顯示*/P0 = 0XFF;//清除斷碼WE = 1;//打開位選鎖存器P0 = 0XFD; //1111 1101WE = 0;//鎖存位選數據DU = 1;//打開段選鎖存器P0 = tabel[num2];//DU = 0;//鎖存段選數據delay(1);}/*==================================== 變量 count:負責控制點亮哪2個數碼管,例如count 為1 則點亮 01 數碼管 描述 :由于同時點亮2個數碼管,需要2個數碼管不斷的循環(huán)才能實現2個數碼管同時點亮所以在這里將數碼管顯示在單片機的代碼封裝起來,來讓我們調用。 ====================================*/ void singlechip_show_num(uchar count){ switch(count){ // 通過 switch case 語句對 數碼管的數值進行精準的管理case 0 :display(0 , 0);break; case 1 :display(0 , 1);break;case 2 :display(0 , 2);break;case 3 :display(0 , 3);break;case 4 :display(0 , 4);break;case 5 :display(0 , 5);break;case 6 :display(0 , 6);break; case 7 :display(0 , 7);break; case 8 :display(0 , 8);break;case 9 :display(0 , 9);break;case 10 :display(1 , 0);break; }}void main()//main函數自身會循環(huán) { while(1){ for (i = 0; i < 200; i++){ // 使點亮的數碼管循環(huán) 200 次,保證人眼能夠看到的數碼管是同時顯示的。singlechip_show_num(count); // 調用數碼管顯示函數}count++; //每次循環(huán)200次結束, count 變量自身+1,單片機顯示+1后的數值if(count == 11){ // 當count 變量 等于11時,我們把變量再重新初始化為0,從0重新開始計數循環(huán)count = 0;}} }效果顯示:
總結
以上是生活随笔為你收集整理的STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STC89C52单片机 独立键盘
- 下一篇: C++ 椭圆类