?? project based on embeded system(c51).txt
字號:
Showyijingfan(yijing);
}
break;
case CSUDU :
sudu=256*serial[1]+serial[2];
if(serial[3]==0)
{
Showsudu(sudu);
}
else
{
Showsudufan(sudu);
}
break;
case CWENDU:
wendu=serial[1];
if(serial[2]==0)
{
Showwendu(wendu);
}
else
{
Showwendufan(wendu);
}
break;
case CBAOJING:
break;
default:
break;
}
OSWait(K_TMO,OS_TICKS_PER_SEC );
}
}
/*********************************************************************************************************
** 函數名稱: CheckPower(void)
** 功能描述: 檢測電量任務
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: OSSemCreate(),OSQPend()
** 以及其他與顯示有關的所有函數
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月15日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void CheckPower(void)
{
power=powerkey;
if(power==0)
{
powertime++;
if(setbaojing==1)
{
run=0;
motor=1;//停止電機
ET1=0;
serial[0]=CBAOJING;
serial[1]=5;
OSQIntPost(CommandData, serial[0]);
OSWait(K_TMO,OS_TICKS_PER_SEC );
serial[0]=CYEMIAN;
serial[1]=16;
OSQIntPost(CommandData, serial[0]);
OSWait(K_TMO,OS_TICKS_PER_SEC );
setbaojing=1;
test=8;
}
}
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: key.c
**創 建 人: 陳杰峰 wishercjf@163.com
**最后修改日期: 2004年6月2日
**描 述: 本文件按鍵的輸入函數
*************************************************************************************
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
***********************************************************************************************************/
#include "config.h"
uint8 OS_Q_MEM_SEL KeyReadBuf[16]; /* 配置鍵盤緩沖區 */
/**********************鍵盤輸入********************************/
/*********************************************************************************************************
** 函數名稱: KeyScan
** 功能描述: 鍵盤驅動與系統相關的掃描函數
** 輸 入: 無
**
** 輸 出: uint8數,實際的按鍵值
KEYJIAWEN 0xfe
KEYSHENGYIN 0xfd
KEYQUEDING 0xfb
KEYSHEZHI 0xf7
KEYJIA 0xef
KEYJIAN 0xdf
KEYMOSHI 0xbf
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 KeyScan(void)
{
uint8 temp;
temp=P0&0xff;
return temp;
}
/*********************************************************************************************************
** 函數名稱: KeyInput
** 功能描述: 為鍵盤輸入服務的任務,本程序基本是按照陳明計先生的源程序,只做了很少的修改
** 輸 入: 無
** 輸 出: 無
** 全局變量: KeyReadBuf
** 調用模塊: 一些Small RTOS 服務例程
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void KeyInput(void)
{
uint8 KeyData;
uint16 i;
OSQCreate(KeyReadBuf,16); /* 創建讀取鍵盤狀態的消息隊列 */
while (1)
{
OSWait(K_TMO, 20); // 延時 20ms
KeyData = KeyScan(); // 獲當前按鍵狀態
if (KeyData == NO_KEY)
{
continue;
}
OSWait(K_TMO, 2); // 去抖(延時 20ms)
if (KeyData != KeyScan())
{
continue;
}
OSQIntPost(KeyReadBuf, KEY_DOWN);
OSQPost(KeyReadBuf, KeyData);
i = KEY_START / (OS_TICKS_PER_SEC / 50);
do
{
OSWait(K_TMO,OS_TICKS_PER_SEC/10 );
if (KeyData != KeyScan())
{
goto KeyEnd; // 按鍵松開
}
} while (--i != 0);
while (1)
{
// 處理按鍵連擊事件
OSQIntPost(KeyReadBuf, KEY_ALWAYS);
OSQPost(KeyReadBuf, KeyData);
i = KEY_DELAY / (OS_TICKS_PER_SEC / 50);
do
{
OSWait(K_TMO,OS_TICKS_PER_SEC / 50);
if (KeyData != KeyScan())
{
goto KeyEnd; // 按鍵松開
}
} while (--i != 0);
}
KeyEnd:
// 處理按鍵松開事件
OSQIntPost(KeyReadBuf, KEY_UP);
OSQPost(KeyReadBuf, KeyData);
}
}
/*********************************************************************************************/
/* End of File */
/*********************************************************************************************/
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: oslcd.c
**創 建 人: 陳杰峰 wishercjf@163.com
**最后修改日期: 2004年6月2日
**描 述: 本文件主要實現lcd的顯示功能,LCD采用北京青云的LCM12232B液晶模塊,程序對于1520控制器通用
*************************************************************************************
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
***********************************************************************************************************/
#include "config.h"
/******************************************************************/
// 定義兩塊液晶所需要的變量和端口 //
/******************************************************************/
uint16 lcd1O_X,lcd1O_Y,lcd1com,dat1;
uint8 count1,code_1;
uint16 lcd2O_X,lcd2O_Y,lcd2com,dat2;
uint8 count2,code_2;
uint16 testdata;
sbit lcd1E2=P2^1;
sbit lcd1E1=P2^0;
sbit lcd1RS=P2^3;
sbit lcd1RW=P2^2;
sbit lcd2E2=P2^5;
sbit lcd2E1=P2^4;
sbit lcd2RS=P2^7;
sbit lcd2RW=P2^6;
sbit ACC_7=ACC^7;
/* 西文字符庫定義 */
code unsigned char CHTAB[96][16]={
0
};
/************************************************************************************/
/* 中文字符庫定義 */
code unsigned char CCTAB[85][32]= {
0
};
/*********************************************************************************************************
** 函數名稱: lcd1PR1()、lcd1PR4()
** 功能描述: 向lcd1模塊發送命令,因為使用的液晶為兩個部分,所以分別控制
**
** 輸 入: 無
** 輸 出: 無
** 全局變量: DATA1,以及lcd1有關的一些端口
** 調用模塊:
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void lcd1PR1()
{
lcd1RS=0;
lcd1RW=1;
do
{
DATA1=0xFF;
lcd1E1=1;
ACC=DATA1; /* 讀狀態字 */
lcd1E1=0;
} while (ACC_7==1); /* 判“忙”標志 */
lcd1RW=0;
DATA1=lcd1com;
lcd1E1=1;
lcd1E1=0;
}
void lcd1PR4()
{
lcd1RS=0;
lcd1RW=1;
do
{
DATA1=0xFF;
lcd1E2=1;
ACC=DATA1; /* 讀狀態字 */
lcd1E2=0;
} while (ACC_7==1); /* 判“忙”標志 */
lcd1RW=0;
DATA1=lcd1com;
lcd1E2=1;
lcd1E2=0;
}
/*********************************************************************************************************
** 函數名稱: lcd1PR2()、lcd1PR5()
** 功能描述: 向lcd1模塊發送數據,因為使用的液晶為兩個部分,所以分別控制
**
** 輸 入: 無
** 輸 出: 無
** 全局變量: DATA1,以及lcd1有關的一些端口
** 調用模塊:
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void lcd1PR2()
{
lcd1RS=0;
lcd1RW=1;
do
{
DATA1=0xFF;
lcd1E1=1;
ACC=DATA1; /* 讀狀態字 */
lcd1E1=0;
} while (ACC_7==1); /* 判“忙”標志 */
lcd1RS=1;
lcd1RW=0;
DATA1=dat1;
lcd1E1=1;
lcd1E1=0;
}
void lcd1PR5()
{
lcd1RS=0;
lcd1RW=1;
do
{
DATA1=0xFF;
lcd1E2=1;
ACC=DATA1; /* 讀狀態字 */
lcd1E2=0;
} while (ACC_7==1); /* 判“忙”標志 */
lcd1RS=1;
lcd1RW=0;
DATA1=dat1;
lcd1E2=1;
lcd1E2=0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -