12
**首届电子创意设计竞赛
/******************************************************************** * 名称 : delay()
* 功能 : 延时,延时时间大概为5US。
***********************************************************************/
void delay() { }
void Delay(uint i) {
uint x,j; for(j=0;j
}
void delay1(uchar z) {
uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
/******************************************************************** * 名称 : bit Busy(void)
* 功能 : 这个是一个读状态函数,读出函数是否处在忙状态
*********************************************************************
//用于普通延时
13
**首届电子创意设计竞赛
**/
bit Busy(void) { }
/******************************************************************** * 名称 : wcmd(uchar del) * 功能 : 1602命令函数
***********************************************************************/
void wcmd(uchar del) {
while(Busy()); lcdrs = 0; lcdrw = 0; lcden = 0; delay(); P0 = del; delay(); lcden = 1; delay(); lcden = 0;
bit busy_flag = 0; lcdrs = 0; lcdrw = 1; lcden = 1; delay();
busy_flag = (bit)(P0 & 0x80); lcden = 0; return busy_flag;
14
**首届电子创意设计竞赛
}
/******************************************************************** * 名称 : wdata(uchar del) * 功能 : 1602写数据函数
***********************************************************************/
void wdata(uchar del) {
while(Busy()); lcdrs = 1; lcdrw = 0; lcden = 0; delay(); P0 = del;
delay(); }
/******************************************************************** * 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
***********************************************************************/
void L1602_init(void) {
wcmd(0x38); Delay(5); wcmd(0x38); lcden = 1; delay(); lcden = 0;
15
**首届电子创意设计竞赛
}
Delay(5); wcmd(0x38); Delay(5); wcmd(0x38); wcmd(0x0d);
/*蜂鸣器发声函数*/ void voice() { sound=1; delay1(2000); sound=0; }
/* LCD写命令函数 */ void write_com(uchar com) {
lcdrs=0; P0=com; delay1(5); lcden=1; delay1(4); lcden=0; }
/*写数据函数*/
void write_data(uchar date) {
lcdrs=1; P0=date; delay1(5);
//写数据控制端高电平
//给个高脉冲结束
//写指令控制端为低
16
**首届电子创意设计竞赛
lcden=1; delay1(5); lcden=0; }
//给个高脉冲结束
/*键盘扫描函数 */ void keyscan() {
uchar temp,xy=0xf7; //xy变量存储第几行 uint i;
for(i=0;i<4;i++) {
xy=_crol_(xy,1); P1=xy; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay1(10); temp=P1;
temp=temp&0x0f; if(temp!=0x0f) { temp=P1; voice(); switch(temp) {
case 0xee: key=7; break; case 0xde: key=8; break; case 0xbe: key=9; break; case 0x7e: key=10; break; case 0xed: key=4; break;
//按键定位
//去抖
//_crol_为左移函数
//行移动