📄 main.c
字号:
// break;
// case delay9:
// delay=0xd0;
// break;
// case delay8:
// delay=0xc0;
// break;
//case delay7:
// delay=0xb0;
// break;
// case delay6:
// delay=0xa0;
// break;
// case delay5:
// delay=0x90;
// break;
//case delay4:
// delay=0x80;
// break;
//case delay3:
// delay=0x40;
// break;
case delay2:
if(edit_state==1)
delay=0x20;
break;
case delay1:
if(edit_state==1)
delay=0x10;
break;
case key_ok:
switch(key1)
{
// case nokey:
// key=key_temp;
// key_temp=0x00;
// delay=0;
// break;
case upkey:
// if(edit_state==1)
{
// key=key_temp;
delay=0x08;
}
break;
case downkey:
//if(edit_state==1)
{
//key=key_temp;
delay=0x08;
}
default: break;
}
break;
case delayflag:
key_scan=1;
if(key1==key_temp)
delay=0x04;
else
{
key_temp=0;
delay=0;
}
break;
case havekey:
key1=0;
key_scan=1;
delay=0x02;
p25=1;
LcdDelay=1;
LcdTime=0;
break;
}
if(delay>2)
{
if(key1==nokey)
{
key=key_temp;
key_temp=0x00;
delay=0;
upcount=0;
downcount=0;
}
}
}
void lcdinit(void)
{
e1=low;
e2=low;
reset=0;
reset=1;
e2=high; //关显示
a0=0;
wr=0;
P0=0x0ae;
e2=low;
e1=high;
P0=0x0ae;
e1=low;
a0=0;
e2=high; /*设置开始显示行*/
P0=lcd_startl;
e2=low;
e1=high;
P0=lcd_startl;
e1=low;
e1=high; /*关节电模式*/
P0=0xa4;
e1=low;
e2=high;
P0=0xa4;
e2=low;
e1=high; /*设置列地址*/
P0=0;
e1=low;
e2=high;
P0=0;
e2=low;
e1=high; /*设置页地址*/
P0=0xb8;
e1=low;
e2=high;
P0=0xb8;
e2=low;
e1=high; /*设置占空比*/
P0=0xa9;
e1=low;
e2=high;
P0=0xa9;
e2=low;
e1=high; /*设置输出方向*/
P0=0xa0;
e1=low;
e2=high;
P0=0xa0;
e2=low;
e1=high; /*设置读修改写特性*/
P0=0xee;
e1=low;
e2=high;
P0=0xee;
e2=low;
e2=high; //开显示
P0=0x0af;
e2=low;
e1=high;
P0=0x0af;
e1=low;
}
/*--------------lcd全屏清零程序----------------*/
/*入口参数:无
返回参数:无*/
void clr_fullscreen()
{
data unsigned char a,b1,c;
a=0;
b1=0;
a0=1;
lcdinit();
for(c=0;c<=3;c++)
{
a0=0;
e1=high; /*设置列地址*/
P0=0;
e1=low;
e2=high;
P0=0;
e2=low;
e1=high; /*设置页地址*/
P0=0xb8+c;
e1=low;
e2=high;
P0=0xb8+c;
e2=low;
a0=1;
for(b1=0;b1<=122;b1++)
{
if(b1<61)
{
e1=high;
P0=a;
e1=low;
}
else
{
e2=high;
P0=a;
e2=low;
}
}
}
}
/*--------------lcd全屏清零程序----------------*/
/*--------------lcd字符串写程序----------------*/
/*入口参数:page、row、length、*p
page:开始显示页地址 page的赋值范围为0~3,2代表最上面一页
3代表第二页,0代表第三页,1代表最底下的一页。
row: 开始显示列地址:0~121
length:显示字符长度
*p: 要显示的字符 赋值方式为(&数组名)*/
void lcdwrite(unsigned char page,unsigned char row,unsigned char length,unsigned char *p)
{
data unsigned char temp_page,temp_row,temp_length,*a,b;
a=p;
a0=0;
wr=0;
temp_row=row;
temp_page=page;
temp_length=length;
if(temp_row<=60)
{
e1=high; /*设置列地址*/
P0=temp_row;
e1=low;
}
else
{
e2=high;
P0=temp_row-61;
e2=low;
}
e1=high; /*设置页地址*/
P0=0xb8+temp_page;
e1=low;
e2=high;
P0=0xb8+temp_page;
e2=low;
a0=1;
for(b=0;b<temp_length;b++)
{
if(temp_row+b>=61)
{
a0=0;
wr=0;
e2=high;
P0=(temp_row+b)-61;
e2=low;
a0=1;
e2=high;
P0=*a;
e2=low;
}
else
{
e1=high;
P0=*a;
e1=low;
}
a++;
}
}
/*--------------lcd字符串写程序----------------*/
/*--------------lcd局部清零程序----------------*/
/*入口参数:page、row、length
page:开始显示页地址 page的赋值范围为0~3,2代表最上面一页
3代表第二页,0代表第三页,1代表最底下的一页。
row: 开始显示列地址:0~121
length:显示字符长度*/
void lcd_partclr(unsigned char page,unsigned char row,unsigned char length)
{
data unsigned char temp_page,temp_row,temp_length,a,b;
a=0x00;
a0=0;
wr=0;
temp_row=row;
temp_page=page;
temp_length=length;
if(temp_row<=60)
{
e1=high; /*设置列地址*/
P0=temp_row;
e1=low;
}
else
{
e2=high;
P0=temp_row-61;
e2=low;
}
e1=high; /*设置页地址*/
P0=0xb8+temp_page;
e1=low;
e2=high;
P0=0xb8+temp_page;
e2=low;
a0=1;
for(b=0;b<temp_length;b++)
{
if(temp_row+b>=61)
{
a0=0;
wr=0;
e2=high;
P0=(temp_row+b)-61;
e2=low;
a0=1;
e2=high;
P0=a;
e2=low;
}
else
{
e1=high;
P0=a;
e1=low;
}
}
}
/*--------------lcd局部清零程序----------------*/
/*--------------lcd汉字写程序----------------*/
/*入口参数:page、row、length
page:开始显示页地址 page的赋值范围为0~3,2代表最上面一页
3代表第二页,0代表第三页,1代表最底下的一页。
row: 开始显示列地址:0~121
length:显示字符长度
*p: 要显示的汉字 赋值方式为(&数组名)*/
void lcdwrite_chinese(unsigned char page,unsigned char row,unsigned char length,unsigned char*p)
{
data unsigned char temp_page,temp_row,temp_length,*a,b,c;
a=p;
a0=0;
wr=0;
temp_row=row;
temp_page=page;
temp_length=length;
if(temp_row<=60)
{
e1=high; /*设置列地址*/
P0=temp_row;
e1=low;
}
else
{
e2=high;
P0=temp_row-61;
e2=low;
}
e1=high; /*设置页地址*/
P0=0xb8+temp_page;
e1=low;
e2=high;
P0=0xb8+temp_page;
e2=low;
a0=1;
for(c=0;c<2;c++)
{
a0=1;
for(b=0;b<temp_length;b++)
{
if(temp_row+b>=61)
{
a0=0;
wr=0;
e2=high;
P0=(temp_row+b)-61;
e2=low;
a0=1;
e2=high;
P0=*a;
e2=low;
}
else
{
e1=high;
P0=*a;
e1=low;
}
a++;
}
wr=0;
a0=0;
e1=high; /*设置页地址*/
P0=(0xb8+temp_page)+1;
e1=low;
e2=high;
P0=(0xb8+temp_page)+1;
e2=low;
if(temp_row<=60)
{
e1=high; /*设置列地址*/
P0=temp_row;
e1=low;
}
else
{
e2=high;
P0=temp_row-61;
e2=low;
}
}
}
/*--------------lcd汉字写程序----------------*/
void lcdwrite_chineseN(unsigned char page,unsigned char row,unsigned char unit,unsigned char*p)
{
data unsigned char a;
for(a=1;a<=unit;a++)
{
length=13;
lcdwrite_chinese(page,row,length,p);
row+=13;
p+=26;
}
}
/*--------------lcd光标写程序----------------*/
/*入口参数:page、row、edit_state
page:开始显示页地址 page的赋值范围为0~3,2代表最上面一页
3代表第二页,0代表第三页,1代表最底下的一页。
row: 开始显示列地址:0~121
edit_state:编辑状态选择位
1:表示编辑状态
0:表示查看状态
注意:箭头为8*6的字符点阵,左边和右边都没有空格,在
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -