标题:
驱动单片机数码管程序改如何写
[打印本页]
作者:
res
时间:
2008-8-30 09:15
标题:
驱动单片机数码管程序改如何写
我想驱动单片机数码管,我的 程序不晓得如何才能写对/-------------------------------
// 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;
}
}
}
//======================================
作者:
hjlost
时间:
2014-11-13 15:43
掘墓高手,专挖古墓,一挖一个坑,坑坑见墓。。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1