本科毕业设计说明书(论文)
}
// ========将坐标转换为LCD的坐标=========== void LCDPosition(uchar row,uchar column) { 示 }
// ==========在指定位置写数据函数===========
void writeChar(uchar row,uchar column, char c) c为待写入的数据。 { }
// ============写字符串函数=================
void writeString(uchar row,uchar column1,uchar column2, char *s) {
LCDPosition(row,column); LCDWriteData(c); delay(200);
LCDWriteCmd(position); delay(10); else if(row == 2)
position = 0xC0 + column - 1; char position; if(row == 1)
//
RW=0;
LCDDataBus=Cmd; EP=1; delay(1); EP=0;
第 32 页 共 41页
row = 0x00在第一行显示,row
= 0x01在第二行显示
position = 0x80 + column - 1;
//
column = 0~15在LCD上的可见域显
// row指定行,column指定列位置,
// row表示行,
column1表示第一行起始地址,column2表示下一行起始地址,均从1开始。
本科毕业设计说明书(论文)
}
// 移动字符串函数 void moveString(char *s) { }
// 液晶初始化函数 void LCDInit(void) {
LCDWriteCmd(0x38); //设置16*2显示,5*7点阵,8位数据接口
uchar i;
writeString(1,25,25,s); for(i = 16; i > 0; i--) { }
LCDWriteCmd(0x18); //屏幕移动 delay(900);
char i; if((*s)=='\\0') { }
if((*(s+i)) == '\\0') { }
if(i > 15 && i< 32) { }
writeChar(row + 1,column2,*(s+i)); delay(2); column2++;
writeChar(row,column1,*(s+i)); delay(2); column1++; break; if(i <= 15) return; for(i = 0; ; i++)
第 33 页 共 41页
本科毕业设计说明书(论文)
delay(30);
LCDWriteCmd(0x01);//清屏 delay(30);
LCDWriteCmd(0x06);//地址加一,整屏右移 delay(30);
LCDWriteCmd(0x0f);//开显示,光标闪烁,显示光标 }
//外部中断初始化 void InuptInit(void) { IT0=1; }
//=================================== // 键盘部分
//===================================
uchar code rowScan[]={0xFE,0xFD,0xFB,0xF7}; uchar
//行扫描码
//uchar code columnScan[]={0xEF,0xDF,0xBF,0x7F};
EX0=1; EA =1;
第 34 页 共 41页
code
key12[]={0xEE,0xDE,0xBE,0xED,0xDD,0xBD,0xEB,0xDB,0xBB,0xE7,0xD7,0xB7}; // 1 2 3 4 5 6 7 8 9 * 0 # uchar code keyValue[]=\
#define KEY P1
//=====键盘扫描函数========== uchar keyScan(void) 键按下时返回字符?$? {
uchar k = 0,flag = 0; for(k = 0;k < 4; k++) {
KEY = rowScan[k];
//逐行扫描
//返回值:有键按下时获得的键盘值(1234567890*#),无
本科毕业设计说明书(论文)
}
//=================================== // 警铃部分
//==================================== sbit Beep = P3^1;
} return '$';
delay(10); { }
uchar i=0;
for(i = 0; i < 12; i++) { }
while(KEY != rowScan[k]); //等待按键释放 if(flag)
return keyValue[i]; if(KEY == key12[i]) { }
//比较键码 flag=1; break;
//按键扫描
if(KEY != rowScan[k])
第 35 页 共 41页
uchar code scalesH[] = {0xf7,0xf8,0xfc,0xf9,0xfa,0xfa,0xfb}; //7个音符所对应的计数器初值 uchar code scalesL[] = {0x20,0x88,0x44,0x59,0x13,0x67,0x04}; uchar note;
//初始化函数 void AlarmInit()
{ TMOD = 0x01; //T/C0工作在方式一 ET0 = 1; EA = 1; }
//播放声音 void play(uchar c)
TR0 = 0;
//开定时器中断 //开总中断 //关闭定时器0
本科毕业设计说明书(论文)
{ uint i; }
//定时器0的中断服务函数 void time0() interrupt 1 {
TH0 = scalesH[note]; TL0 = scalesL[note]; Beep = ~Beep; }
//==================================== // 主函数
//====================================
switch( c ) {
case 0 : note = 6;
for(i=0;i<3;i++) {
TR0 = 1; delay(300); TR0 = 0; delay(300); }
break;
for(note=2;note<6;note++)
case 1 :
第 36 页 共 41页
{
TR0 = 1; delay(300); TR0 = 0; delay(300); } }
Beep = 1;
break;