實現功能:數碼管可以顯示0-99兩位數字,用三個按鍵分別表示加、減、復位。
按一下加按鍵,數字加1;按一下減按鍵,數字減1。初始化顯示為學號后兩位。
Proteus仿真電路圖如下:
電路圖
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極數碼管編碼
- sbit up=P2^2; //加1按鍵
- sbit down=P2^3; //減1按鍵
- sbit clear=P2^4; //初始化按鍵,學號后兩位08
- sbit shiwei=P2^0; //數碼管十位位選
- sbit gewei=P2^1; //數碼管個位位選
- char ge=0; //定義個位初始值
- char shi=0; //定義十位初始值
- char shuzi=8; //定義初始化值
- void delay(uint);//延時函數
- void display();//數碼管顯示函數
- void main()
- {
- while(1)
- {
- if(up==0)//加1按鍵按下檢測
- {
- delay(10);//消抖
- if(up==0)
- {
- shuzi++;
- if(shuzi==100)//加到99變回0
- shuzi=0;
- }
- while(up==0)//松手檢測出后顯示數字
- {
- display();
- }
- }
-
- if(down==0)//減1按鍵按下檢測
- {
- delay(10);//消抖
- if(down==0)
- {
- shuzi--;
- if(shuzi==(-1))//減到0變回99
- {
- shuzi=99;
- }
- }
- while(down==0)//松手檢測出后顯示數字
- {
- display();
- }
- }
- if(clear==0)//初始化(08)按鍵按下檢測
- {
- delay(10);//消抖
- if(clear==0)
- {
- shuzi=8;//初始化顯示學號后兩位08
- }
- while(clear==0)//松手檢測出后顯示數字
- {
- display();
- }
- }
- display();
- }
- }
- void delay(uint ms)//延時函數
- {
- uint i,j;
- for(i=ms;i>0;i--)
- for(j=120;j>0;j--);
- }
- void display() //數碼管顯示函數聲明
- {
- ge=shuzi%10; //計算個位處數碼管的數值
- shi=shuzi/10; //計算十位處數碼管的數值
- gewei=1; //關閉數碼管輸入,防止數據有誤
- shiwei=1; //關閉數碼管輸入,防止數據有誤
- P0=seg[ge]; //送入段選值
- gewei=0; //導通數碼管個位位選
- delay(2);
- gewei=1; //關閉個位位選
- P0=seg[shi]; //送入段選值
- shiwei=0; //導通數碼管十位位選
- delay(2);
- shiwei=1; //關閉十位位選
- }
復制代碼
所有資料51hei提供下載:
數碼顯示.zip
(100.93 KB, 下載次數: 54)
2020-10-27 00:13 上傳
點擊文件名下載附件
數碼顯示電路圖及代碼
|