基於51微控制器開發板的應用(數碼管續1)
阿新 • • 發佈:2019-01-28
顯示0-99
用8位共陰數碼可以通過動態掃描顯示0~99,考慮十位和個位,需要用到陣列來存放。其中的重要程式碼是display()函式,firstbit表示從第n個數開始顯示,num表示顯示的個數,所以若是改變陣列tempdata的陣列元素,則可以顯示更多位的數字,並且8位數碼管可以任意選擇數碼管。主函式中的j++,j==500,是為了在測試硬體時增加迴圈的次數而達到顯示時更加清晰。
#include<reg51.h> #define DataPort P0 sbit Seg_latch=P2^2; sbit Bit_latch=P2^3; unsigned char code Seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code Bit_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char tempdata[2]; //兩位數 void display(unsigned char firstbit,unsigned char num); void delay(unsigned int i) { while(i--); } void main(void) { unsigned int j,num; num=0; while(1) { j++; if(j==500) { j=0; num++; if(num==100) { num=0; } } tempdata[0]=num/10; //十位 tempdata[1]=num%10; //個位 display(0,2); } } void display(unsigned char firstbit,unsigned char num) //firstbit從第n個數開始顯示,num顯示的個數 { unsigned char i,j; while(1) { for(i=0; i<num; i++) { DataPort=0x00; Seg_latch=1; Seg_latch=0; DataPort=Bit_code[i+firstbit]; //位碼 Bit_latch=1; Bit_latch=0; j=tempdata[i]; //段碼 DataPort=Seg_code[j]; Seg_latch=1; Seg_latch=0; delay(200); } } }