資源簡介
//簡介:第一行顯示,距離系統爆炸時間
//第二行顯示,還剩
//第三行顯示,00時,00分,00秒
//第四行顯示, 周林
//按下旋鈕開關,開始設定秒,秒編輯位閃動。左右旋轉設定數值,
//在按下開關,秒確定,設定分,分編輯位閃動左右調數值,
//再按下,分確定,小時位閃動。左右轉調小時,再按一下。
//時間確定,開始倒計時。到達定時時間后停止,并閃動。
代碼片段和文件信息
//簡介:第一行顯示,距離系統爆炸時間
//第二行顯示,還剩
//第三行顯示,00時,00分,00秒
//第四行顯示,?????????????周林
//按下旋鈕開關,開始設定秒,秒編輯位閃動。左右旋轉設定數值,
//在按下開關,秒確定,設定分,分編輯位閃動左右調數值,
//再按下,分確定,小時位閃動。左右轉調小時,再按一下。
//時間確定,開始倒計時。到達定時時間后停止,并閃動。
#include?
#include?
/*********************?定義?********************************/
#define?LCD_data??P0???????//數據口
sbit?LCD_RS?=?P2?^?0;?//寄存器選擇輸入
sbit?LCD_RW?=?P2?^?1;?//液晶讀/寫控制
sbit?LCD_EN?=?P2?^?2;?//液晶使能控制
sbit?LCD_PSB?=?P2?^?3;?//串/并方式控制
sbit?LCD_RST?=?P2?^?5;?//液晶復位端口
sbit?sset=P3^4;//設置按鈕
sbit?spk=P1^4;
sbit?sadd=P2^7;
sbit?sdel=P2^6;
signed?char?second=0minute=0hour=0count=0keycount=0;
signed?char?key=0;
unsigned?char?code?DIS1[]?=
{
??“距離系統爆炸時間“
};
unsigned?char?code?DIS2[]?=
{
??“還剩:“
};
unsigned?char?code?DIS31[]?=
{
??“時“
};
unsigned?char?code?DIS32[]?=
{
??“分“
};
unsigned?char?code?DIS33[]?=
{
??“秒“
};
unsigned?char?code?DIS4[]?=
{
??“周林“
};
unsigned?char?code?table2[]=“0123456789“;
char?code?reserve[3]_at_?0x3b;?//保留0x3b開始的3個字節
/*********************延時子函數**************************/
void?delayNOP()//us延時子函數???(4.34us)
{
??_nop_();
??_nop_();
??_nop_();
??_nop_();
}
void?delayms(unsigned?int?ms)//ms延時子函數
{
??unsigned?char?y;
??while?(ms--)
??{
????for?(y?=?0;?y?114;?y++)
??????;
??}
}
//******************檢查LCD忙狀態**************************
bit?lcd_busy()//檢查LCD忙狀態?1忙,0閑
{
??bit?result;
??LCD_RS?=?0;
??LCD_RW?=?1;
??LCD_EN?=?1;
??delayNOP();
??result?=?(bit)(P0?&0x80);
??LCD_EN?=?0;
??return?(result);
}
//***********************寫指令數據***********************
void?lcd_wcmd(unsigned?char?cmd)//寫指令數據到LCD
{
??while?(lcd_busy())
??{
?;
??}
??LCD_RS?=?0;
??LCD_RW?=?0;
??LCD_EN?=?1;
??P0?=?cmd;
??delayNOP();
??LCD_EN?=?0;
}
void?lcd_wdat(unsigned?char?dat)//寫顯示數據到LCD
{
??while?(lcd_busy())
????;
??LCD_RS?=?1;
??LCD_RW?=?0;
??LCD_EN?=?1;
??P0?=?dat;
??delayNOP();
??LCD_EN?=?0;
}
void?writesmh(unsigned?char?addunsigned?char?date)//顯示個位和十位數據
{
unsigned?char?shige;
shi=date/10;
ge=date%10;
lcd_wcmd(0x80+add);
delayms(5);
lcd_wdat(table2[shi]);
delayms(5);
lcd_wdat(table2[ge]);
delayms(5);
}
//*********************初始化設定****************************
void?lcd_init()
{
??LCD_PSB?=?1;?//并口方式
??LCD_RST?=?0;?//液晶復位
??delayms(5);??//液晶復位
??LCD_RST?=?1;?//液晶復位
??delayms(5);??//液晶復位
??lcd_wcmd(0x34);?//擴充功能設定,擴充指令,選8位數據
??delayms(5);
??lcd_wcmd(0x30);?//功能設定,基本指令操作,選8位數據
??delayms(5);
??lcd_wcmd(0x0C);?//顯示開,關光標,關光標反白允許。
??delayms(5);
??lcd_wcmd(0x04);?//光標的移動方向
??delayms(5);
??lcd_wcmd(0x01);?//清除LCD的顯示內容
??delayms(5);
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=0;
EX0=0;?//外部中斷0允許
IT0=1;?//外部中斷0為邊沿觸發方式
}
//*********************設定顯示位置子函數**********************
void?lcd_pos(unsigned?char?X?unsigned?char?Y)//設定顯示位置
{
??unsigned?char?pos;
??if?(X?==?1)
??{
????X?=?0x80;
??}
??else?if?(X?==?2)
??{
????X?=?0x90;
??}
??else?if?(X?==
評論
共有 條評論