我想驅動單片機數碼管,我的 程序不曉得如何才能寫對/------------------------------- // MCS51-Study.C //------------------------------ // [文件包含] 程序中用到哪些C51標準函數,就需要把該函數對應的頭文件包含進來 //-----#include #include #include //----------------------------------- // 為提高書寫效率做以下宏定義 //------------------------------- #define uchar unsigned char #define uint unsigned int #define ulong unsigned long
#define CLOSE 1//為了邏輯清晰 #define OPEN 0
sbit SECOND_L =P2^0;//數碼管公共端控制位管腳 sbit SECOND_H =P2^1;
//============================================= //======================全局變量============= uchar timer_50ms; uchar hour; uchar minute; uchar second;
uchar leddata[]={0xC7, //"0" 0xFA, //"1" 0xAB, //"2" 0xB7, //"3" 0x9A, //"4" 0x98, //"5" 0x88, //"6" 0xF9, //"7" 0x87, //"8" 0x97, //"9" }; //------------------------------------------ // 鍵盤掃描相關的全局變量 //----------------------------------------- uchar key_value_previous; uchar key_press_counter; uchar key_value_main; //------------------------------------- // 函數聲明 //------------------------------------------ void init_cpu(void); void show_time(uchar hour_data,uchar minute_data,uchar second_data); uchar key_scan(void); //=============================== //===================== ====== //===================== 主程序== //===================== ======= //======================================== void main (void) { init_cpu(); second = 0;
wqyloop: show_time(hour,minute,second); goto wqyloop; } //########################## 主程序結束 ######## //########################## 子程序開始 ######## // 函數功能:CPU初始化函數 // 串口波特率可以由T1或T2產生,本例中用T1產生波特率 // T1用于50毫秒精確定時
//================================================= void init_cpu(void) { TMOD=0x10;//T1為16位計數器
TH1=0x4c;//11.0592M晶振時T1定時時間長度為50毫秒 TL1=0x00; TR1=1;//T1開始定時
ET1=1; EA=1;//CPU中斷開放 } //======================================= void show_time(uchar hour_data,uchar minute_data,uchar second_data) { uchar hour_data_h; uchar hour_data_l; uchar minute_data_h; uchar minute_data_l; uchar second_data_h; uchar second_data_l;
hour_data_h = hour_data/10; hour_data_l = hour_data%10; minute_data_h = minute_data/10; minute_data_l = minute_data%10; second_data_h = second_data/10; second_data_l = second_data%10;
//掃描顯示
P0 = leddata[second_data_h]; SECOND_H=OPEN; SECOND_L=CLOSE;
P0 = leddata[second_data_l]; SECOND_H=CLOSE; SECOND_L=OPEN; } //=====================================中斷===== // T1中斷服務程序 //============================================ void T1_interrupt(void) interrupt 3 { TH1=0x4c;//11.0592M晶振時T1定時時間長度為50毫秒 TL1=0x00; timer_50ms++;//50毫秒中斷一次 if(timer_50ms==20) {second = second+1; if(second==60) {second=0; } } } //======================================
|