湖北师范学院物理与电子科学学院13级单片机课程设计
}
//************************************************************************/
// 描述: 1602液晶写指令
//************************************************************************/
void write_com(uchar com) //1602液晶写指令 { }
//************************************************************************/
// 描述:1602液晶写数据
//************************************************************************/
void write_date(uchar date) //1602液晶写数据 {
for(j=0;j<113;j++) ;
//执行113次循环
rs=0; //写指令 lcden=0; //使能1602 P0=com; //写入指令com LCD_Delay_ms(1); //延时1ms lcden=1; //使能1602 LCD_Delay_ms(2); //延时2ms lcden=0; //使能1602
rs=1; //写数据 lcden=0; //使能1602 P0=date; //写入数据date LCD_Delay_ms(1); //延时1ms
18
湖北师范学院物理与电子科学学院13级单片机课程设计
}
//************************************************************************/
// 描述:指定x,y写入字符函数
//************************************************************************/
void W_lcd(unsigned char x,unsigned char y,unsigned char Data) { }
//指定x,y写入字符串函数
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {
if (y == 0){write_com(0x80 + x);} else{write_com(0xC0 + x);} while (*s) {write_date( *s); s++;} }
//************************************************************************/
// 描述:初始化液晶,及画面初始化
//************************************************************************/
void init_lcd(void) //初始化液晶,及画面初始化
19
lcden=1; //使能1602 LCD_Delay_ms(2); //延时2ms lcden=0; //使能1602
if (y == 0){write_com(0x80 + x);} //第一行 else{write_com(0xc0 + x);} //第二行 write_date( Data); //写入数据
//第一行 //第二行 //
//写入数据
湖北师范学院物理与电子科学学院13级单片机课程设计
{ }
//************************************************************************/
// 描述: 反转法键盘扫描
//************************************************************************/
short keycheckdown() {
wela=0; //写液晶 lcden=0; //使能1602
write_com(0x38); //8 位总线,双行显示,5X7 的点阵字符 LCD_Delay_us(100); //延时100us
write_com(0x0c); //开显示,无光标,光标不闪烁 write_com(0x06); //光标右移动 write_com(0x01); //清屏
write_com(0x80); //DDRAM 地址归0
/* 反转法键盘扫描 */
short temp1,temp2,temp,a=0xff; P1=0xf0;
/* 输入行值(或列值) */ /* 延时 */
/* 读列值(或行值) */
LCD_Delay_ms(20); temp1=P1; P1=0xff;
LCD_Delay_ms(20); P1=0x0f;
/* 延时 */
/* 输入列值(或行值) */ /* 延时 */
/* 读行值(或列值) */
LCD_Delay_ms(20); temp2=P1; P1=0xff;
temp=(temp1&0xf0)|(temp2&0xf); /* 将两次读入数据组合 */
20
湖北师范学院物理与电子科学学院13级单片机课程设计
}
void display_a() //显示数据a
21
switch(temp) {
/* 通过读入数据组合判断按键位置 */
case 0x77 :a=0x0d;break;// 按键/ case 0x7b :a=0x0e; break;// 按键= case 0x7d :a=0; break;// 按键0 case 0x7e :a=0x0f; break;// 按键CE
case 0xb7 :a=0x0c;break;// 按键* case 0xbb :a=0x9;break; // 按键9 case 0xbd :a=0x8;break; // 按键8 case 0xbe :a=0x7;break; // 按键7
case 0xd7 :a=0x0b;break;// 按键- case 0xdb :a=0x6;break; // 按键6 case 0xdd :a=0x5;break; // 按键5 case 0xde :a=0x4;break; // 按键4
case 0xe7 :a=0x0a; break;// 按键+ case 0xeb :a=3;break; case 0xed :a=2;break; case 0xee :a=1;break;
// 按键3 // 按键2 // 按键1
}
default :a=0xff;
return a; /* 返回按键值 */
湖北师范学院物理与电子科学学院13级单片机课程设计
{ }
void display_b() //显示数据b {
if(data_b>999){ write_date('0'+dispaly[3]); } //显示千位 if(data_b>99) { write_date('0'+dispaly[2]); } //显示百位 if(data_b>9) { write_date('0'+dispaly[1]); } //显示十位 }
//计算结果 void display_c(x)
22
dispaly[3]=data_a000/1000; //千 dispaly[2]=data_a00/100; //百 dispaly[1]=data_a0/10; //十 dispaly[0]=data_a; //个
write_com(0x80+0); //显示数据a
if(data_a>999){ write_date('0'+dispaly[3]);} //显示千位 if(data_a>99){
write_date('0'+dispaly[2]);}
//显示百位
if(data_a>9){ write_date('0'+dispaly[1]);} //显示十位 write_date('0'+dispaly[0]); //显示个位
write_com(0x80+7); //第一行
dispaly[3]=data_b000/1000; //千 dispaly[2]=data_b00/100; //百 dispaly[1]=data_b0/10; //十 dispaly[0]=data_b; //个
write_date('0'+dispaly[0]); //显示个位