標題:
驅(qū)動單片機數(shù)碼管程序改如何寫
[打印本頁]
作者:
res
時間:
2008-8-30 09:15
標題:
驅(qū)動單片機數(shù)碼管程序改如何寫
我想驅(qū)動單片機數(shù)碼管,我的 程序不曉得如何才能寫對/-------------------------------
// MCS51-Study.C
//------------------------------
// [文件包含] 程序中用到哪些C51標準函數(shù),就需要把該函數(shù)對應(yīng)的頭文件包含進來
//-----#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;//數(shù)碼管公共端控制位管腳
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"
};
//------------------------------------------
// 鍵盤掃描相關(guān)的全局變量
//-----------------------------------------
uchar key_value_previous;
uchar key_press_counter;
uchar key_value_main;
//-------------------------------------
// 函數(shù)聲明
//------------------------------------------
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;
}
//########################## 主程序結(jié)束 ########
//########################## 子程序開始 ########
// 函數(shù)功能:CPU初始化函數(shù)
// 串口波特率可以由T1或T2產(chǎn)生,本例中用T1產(chǎn)生波特率
// T1用于50毫秒精確定時
//=================================================
void init_cpu(void)
{
TMOD=0x10;//T1為16位計數(shù)器
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中斷服務(wù)程序
//============================================
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;
}
}
}
//======================================
作者:
hjlost
時間:
2014-11-13 15:43
掘墓高手,專挖古墓,一挖一個坑,坑坑見墓。。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1