?? main.c
字號:
//*************************************************************************************************
//*************************************************************************************************
//**<程序名>:LCD顯示應用 **
//**<功能>:LCD顯示滾動的一句話,以及鍵盤輸入。 **
//**<作者>:LastRitter **
//**<完成時間>:2007年8月8日 **
//**<聯系方式>:E-mail:superyongzhe@163.com;QQ:314665354。 **
//*************************************************************************************************
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************頭文件及宏定義************************** *
//* *
//*************************************************************************************************
#include "includes.h"
#define TIME1H 0x3C
#define TIME1L 0xB0 //定時器1溢出時間:50ms
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_KeyShock=0; //鍵盤防抖動標志位。
//當按鍵中斷產生時,首先判斷此位。
//0--執行鍵盤掃描及鍵碼處理程序;1--不執行。
bit b_KillShock=0; //防抖標志清除位:0--不清除;1--清除。
unsigned char uc_KillCount=1; //抖動標志清除計數,使用定時器1。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鍵盤掃描開啟標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_KeyScan=0; //0--不掃描;
//1--掃描。
extern bit b_Introduce; //介紹關閉標志,當置零時,介紹就會停止顯示。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按鍵計數清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_CleanCount=0; //清除按鍵計數時間計數。
extern bit b_CleanClick; //清除按鍵計數標志,定義在KeyProcess.c中
//0--不清除;
//1--清除。
//在定時器1中使用。
extern unsigned char uc_ClickCount; //按鍵連續點擊計數,定義在KeyProcess.c中。
extern unsigned char uc_KeyTemp; //按鍵鍵碼暫存,定義在KeyProcess.c中。
//*************************************************************************************************
//* *
//* ********************************主函數****************************** *
//* *
//*************************************************************************************************
void main()
{
P1=0x0F;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IT0=1; // 中斷方式:下降沿。
EX0=1; // 開啟外部中斷。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器1,用于防抖動標志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
TR1=1; //開啟定時器1
ET1=1; //開定時器1中斷
EA=1; //開總中斷。
vdInitialize(); //LCD初始化,相關參數在“SMC1602.h”中修改。
//注意,初始化里省略了vWriteCMD(0x0C),在vIntroduce()里有。
vIntroduce(); //顯示介紹。
while(1)
{
if(b_KeyScan==1) //如果有按鍵按下,則進行按鍵掃描和鍵碼處理。
{
b_KeyScan=0;
vKeyProcess(ucKeyScan());
}
}
}
//*************************************************************************************************
//* *
//* ******************************外部中斷0,用于開啟鍵盤掃描及鍵碼處理****************** *
//* *
//*************************************************************************************************
void vINT0(void) interrupt 0
{
if(b_KeyShock==0)
{
if(b_Introduce==0) //此判斷是為了屏蔽從介紹返回字符輸入時的鍵盤掃描。
{
b_KeyScan=1; //開啟鍵盤掃描標志。
b_KeyShock=1; //設置防抖動標志。
}
}
else b_KeyShock=0; //如果有抖動則不執行鍵掃描,恢復防抖動標志。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設置防抖動清除標志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_KeyShock==1)
b_KillShock=1; //如果防抖動標志位開啟則開啟防抖動標志清除位,
//300ms后清除防抖動標志。
b_Introduce=0; //用于關閉介紹,在顯示介紹時如果有案件按下,產生的中斷會
} //把此標志置零,便可退出介紹。
//*************************************************************************************************
//* *
//* ****************定時器1中斷,用于計時功能和防抖動標志清除以及顯示報告**************** *
//* *
//*************************************************************************************************
void vTimer1(void) interrupt 3
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_KillShock==1)
{
if(uc_KillCount%5==0) //當防抖動標志位為1時,計時300ms后清除抖動標志位。
{
b_KeyShock=0;
b_KillShock=0;
uc_KillCount=1;
}
else uc_KillCount++;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按鍵計數清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_CleanClick==1)
{
if(uc_CleanCount==100)
{
b_CleanClick=0; //關閉改計數。
uc_CleanCount=1; //恢復計數初值。
uc_ClickCount=1; //清除按鍵計數。
uc_KeyTemp=0;
}
else
uc_CleanCount++;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復定時器1溢出時間>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -