#include <reg52.h>
#define uchar unsigned char //宏定義 #define uint unsigned int //宏定義 #define DELAY_TIME 2 //將常量定義為宏,方便修改代碼 sbit we = P2^7; //數碼管位選鎖存器接口 sbit du = P2^6; //數碼管段選鎖存器接口 //數碼管段選表 uchar code 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 //自定義 }; //毫秒級延時函數 void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); }
void main() { while(1) {
P0 = 0xfe;//1111 1110 第一位數碼管顯示,注意數碼管的排序,P0.0對應連接的是左邊第一位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[1]; du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME);//延時
P0 = 0xfd; //1111 1101 只選通第二位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[2]; //顯示2 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME);//延時
P0 = 0xfb; // 1111 1011只選通第三位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[3]; //顯示3 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME); //延時
P0 = 0xf7; //1111 0111 只選通第四位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[4]; //顯示4 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME);//延時
P0 = 0xef; //1110 1111 只選通第五位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[5]; //顯示5 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME);//延時
P0 = 0xdf; //1101 1111 只選通第六位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[6]; //顯示6 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME); //延時
we = 1; //打開位選 P0 = 0xbf; //1011 1111 只選通第七位數碼管 we = 0; //關閉位選
P0 = leddata[7]; //顯示7 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME); //延時
P0 = 0x7f; //0111 1111 只選通第八位數碼管 we = 1; //打開位選 we = 0; //關閉位選
P0 = leddata[8]; //顯示8 du = 1; //打開段選 du = 0; //關閉段選 delay(DELAY_TIME); //延時 } }
|