📄 mbm12864lcd 090430.c
字号:
p=fuhao_ku;
p=p+(2*HZFH_MOD*s[j]);
//p=p+(*str++)*HZFH_MOD*2;
//p=p+2*HZFH_MOD*(*str++);
set_lcd_page(lcd_page-1);
set_lcd_column(lcd_column);
for(i=0;i<HZFH_MOD;i++)
{
zimo_temp=*p++; //读出字模
zimo_temp=(read_lcd_data()^zimo_temp);
write_lcd_data(zimo_temp);
}
set_lcd_page(lcd_page);
set_lcd_column(lcd_column);
for(i=0;i<HZFH_MOD;i++)
{
zimo_temp=*p++; //读出字模
zimo_temp=(read_lcd_data()^zimo_temp);
write_lcd_data(zimo_temp);
}
lcd_column=lcd_column+HZFH_MOD;
}
write_lcd_ordor(LCD_MODIFL_READ_OFF);
}
//******************************************************
//清12864LCD显示屏
//******************************************************`
void cls_lcd12864_progrom(void)
{
char i,j;
for(j=0;j<8;j++)
{
set_lcd_column(0);
set_lcd_page(j);
for(i=0;i<128;i++) write_lcd_data(0x00);
}
}
//******************************************************
//清LCD显示屏当前一个128*16水平行
//结束后lcd_column=0
//******************************************************
void cls_lcd_doubpage(void)
{
char i;
set_lcd_column(0);
set_lcd_page(lcd_page-1);
for(i=0;i<128;i++) write_lcd_data(0x00);
set_lcd_page(lcd_page);
for(i=0;i<128;i++) write_lcd_data(0x00);
lcd_column=0; set_lcd_column(0);
}
//******************************************************
//显示一个12864图片
//******************************************************
void display_bmp_progrom(const char *picture)
{
char i,j;
set_lcd_page(0);
set_lcd_column(0);
for(j=0;j<8;j++)
{
set_lcd_page(j);
set_lcd_column(0);
for(i=0;i<128;i++)write_lcd_data(*picture++);
}
set_lcd_page(0);
set_lcd_column(0);
}
//******************************************************
//显示一个任意大小窗口
//X Y LX LY
//结束后lcd_page lcd_column 0
//******************************************************
void display_mini_windows(unsigned char column_address,unsigned char page_address,
unsigned char x_val,unsigned char y_val)
{
char i,j;
set_lcd_page(column_address);
set_lcd_column(page_address);
write_lcd_data(0xff); //第1行
write_lcd_data(0xf3);
for(i=2;i<(x_val-2);i++) write_lcd_data(0xdf);
write_lcd_data(0xf3);
write_lcd_data(0xff);
for(j=1;j<y_val;j++) //第2--y_val-1行
{
set_lcd_page(page_address+j);
set_lcd_column(column_address);
write_lcd_data(0xff);
write_lcd_data(0x00);
for(i=2;i<(x_val-2);i++) write_lcd_data(0xFF);
write_lcd_data(0x00);
write_lcd_data(0xff);
}
set_lcd_page(page_address+y_val);//第y_val行
set_lcd_column(column_address);
write_lcd_data(0xff);
write_lcd_data(0xc0);
for(i=2;i<(x_val-2);i++) write_lcd_data(0xbf);
write_lcd_data(0xc0);
write_lcd_data(0xff);
}
//******************************************************
//显示开机LOG
//"设备名称" "石家庄梅波科技开发有限公司""www.hbmeibo.com"
//1正显示2.5s 2反显示2S 3滚动显示100ms*64 4斑条显示2.5s 5单点擦除结束
//******************************************************
void display_log_progrom(void)
{
char i,j,str[16];
display_bmp_progrom(log_data1);
time_1s_Flag=0;do{}while(time_1s_Flag==0);write_lcd_ordor(LCD_DISPLAY_REV_REV);
time_1s_Flag=0;do{}while(time_1s_Flag==0);write_lcd_ordor(LCD_DISPLAY_REV_NOR);
cls_lcd12864_progrom();
out6HZtextxy((4+2*HZFH_MOD*2),1,HZ_wen,HZ_du,HZ_kong,HZ_zhi,HZ_she,HZ_bei);//温度控制设备
out5HZtextxy((10+2*HZFH_MOD*2),3,HZ_shi,HZ_nop,HZ_jia,HZ_nop,HZ_zhuang); //石 家 庄
out10HZtextxy(4+2*HZFH_MOD*0,5,HZ_mei,HZ_bo,HZ_ke,HZ_ji,HZ_kai,HZ_fa,HZ_you,HZ_xian,HZ_gong,HZ_si); //梅波科技开发有限公司
sprintf(str,"%15s","www.hbmeibo.com");
outtextxy(7+HZFH_MOD*2,7,str);
time_4s_Flag=0;do{}while(time_4s_Flag==0);
/*
for(i=0;i<64;i++) //向上推移
{
time_10ms_Flag=0;do{}while(time_10ms_Flag==0);
write_lcd_ordor(0x40|i);
}
for(i=64;i>0;i--) //向下推移
{
time_10ms_Flag=0;do{}while(time_10ms_Flag==0);
write_lcd_ordor(0x40|i);
}
write_lcd_ordor(0x40);
*/
write_lcd_ordor(LCD_MODIFL_READ_ON);
for(j=0;j<8;j++) //隔行异或
{
set_lcd_page(j);
set_lcd_column(0);
for(i=0;i<128;i++)
{
time_x_Flag=0;timex=TIME_1msVAL;do{} while(time_x_Flag==0);
write_lcd_data(read_lcd_data()^0xff);
}
}
for(j=0;j<8;j++) //隔行异或
{
set_lcd_page(j);
set_lcd_column(0);
for(i=0;i<128;i++)
{
time_x_Flag=0;timex=TIME_1msVAL;do{} while(time_x_Flag==0);
write_lcd_data(read_lcd_data()^0xff);
}
}
write_lcd_ordor(LCD_MODIFL_READ_OFF);
timex=TIME_1sVAL;time_x_Flag=0;do{}while(time_x_Flag==0);
}
//******************************************************
//延时程序 单位i>
//******************************************************
void delay(unsigned char i)
{
do{i--;}while(i>0);
}
//******************************************************
//蜂鸣器程序 开启5ms后关断
//******************************************************
void beep(void)
{
unsigned int i=(5000*FCY);
SPEAK_DRV=1;
do{}while(--i>0);
SPEAK_DRV=0;
}
//******************************************************
//每4ms启动读键值及LED指示灯显示一次1次
//每次扫描一对键和一对LED灯
//完全扫描一个周期需要20ms
//1.LK_SLe=1 LK_SLx=0
//2.LED_RAMx-->LED_S1-6
//3.IF KEY_S1=0 KEY_RAM0=x;IF KEY_S2=0 KEY_RAM0=x
//4.IF KEY_COUNT=0 解析KEY值 KEY_COUNT=5 else key_count--;
/*有关变量和参数
#define KEY_S1 RB6 //键盘:输入1
#define KEY_S2 RB7 //键盘:输入2
#define LED_S1 RB0 //LED:输出1
#define LED_S2 RB1 //LED:输出1
#define LED_S3 RB2 //LED:输出1
#define LED_S4 RB3 //LED:输出1
#define LED_S5 RB4 //LED:输出1
#define LED_S6 RB5 //LED:输出1
#define LK_SL1 RA0 //KEYLED扫描:输出1
#define LK_SL2 RA1 //KEYLED扫描:输出2
#define LK_SL3 RA2 //KEYLED扫描:输出3
#define LK_SL4 RA3 //KEYLED扫描:输出4
#define LK_SL5 RA4 //KEYLED扫描:输出5
#define LK_SL6 RA5 //KEYLED扫描:输出6
bank2 unsigned char key_count; //键盘计数器0-4
bank2 unsigned char flagled_ram1; //LED指示灯显示数据 K1 K1+5对应LED第1个
bank2 unsigned char flagled_ram2; //LED指示灯显示数据 K2 K2+5对应LED第1个
bank2 unsigned char flagled_ram3; //LED指示灯显示数据 K3 K3+5对应LED第1个
bank2 unsigned char flagled_ram4; //LED指示灯显示数据 K4 K4+5对应LED第1个
bank2 unsigned char flagled_ram5; //LED指示灯显示数据 K5 K5+5对应LED第1个
bank2 unsigned char key_ram0; //健值缓冲区 第0个 K1-K10对应
bank2 unsigned char key_ram1; //健值缓冲区 第1个 K1-K5对应
bank2 unsigned char key_ram2; //健值缓冲区 第2个 K1-K5对应
bank2 unsigned char key_re_count; //重复健计数器
unsigned char volatile key_val; //健值
bit volatile key_re_bit; //键盘重复标志
bit volatile key_set_bit; //键盘复合标志
bit volatile key_sel_bit; //键盘复合标志
键值标示方法:
K1=01 K2=02 .....k9=0x20 k10=40
RE_keyx=01+0x80 SET——key=01+0x40 (复合) SEL+key==01+0x20
led指示灯 分为5组 分别用flagled_ramx标示 (KEY1) B0--LED1 B1--LED2 B2--LED3
(KEY2) B4--LED1 B5--LED2 B6--LED3
*/
//******************************************************
void read_key_prom()
{
if(time_key_Flag==0) return;
time_key_Flag=0;
LK_SL1=1;
LK_SL2=1;
LK_SL3=1;
LK_SL4=1;
LK_SL5=1;
if(key_count==5)
{
display_flagled(flagled_ram1);
LK_SL1=0;
if(KEY_S1==0) key_ram0=0x01;
if(KEY_S2==0) key_ram0=0x02;
}
else if(key_count==4)
{
display_flagled(flagled_ram2);
LK_SL2=0;
if(KEY_S1==0) key_ram0=0x03;
if(KEY_S2==0) key_ram0=0x04;
}
else if(key_count==3)
{
LK_SL3=0;
display_flagled(flagled_ram3);
if(KEY_S1==0) key_ram0=0x05;
if(KEY_S2==0) key_ram0=0x06;
}
else if(key_count==2)
{
display_flagled(flagled_ram4);
LK_SL4=0;
if(KEY_S1==0) key_ram0=0x07;
if(KEY_S2==0) key_ram0=0x08;
}
else if(key_count==1)
{
LK_SL5=0;
display_flagled(flagled_ram5);
if(KEY_S1==0) key_ram0=(key_ram0+0x20);
if(KEY_S2==0) key_ram0=(key_ram0+0x40);
}
if((--key_count)!=0)return;
if(key_re_bit==1) //重复按键检测确认和退出
{
if((key_ram0==key_ram1)&&(key_ram1==key_ram2)&&(key_ram0!=0))
{
if(--key_re_count==0)
{
key_val=(key_ram1+0x80);
key_re_count=KEY_RE_COUNT1;
}
}
else
{
key_ram1=0;
key_ram2=0;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
}
}
else
if(key_set_bit==1) //SET复合按键确认和退出
{
if((key_ram0==KEY_SET)&&(key_ram1==key_ram2)&&(key_ram1!=KEY_SET))
{
key_val=key_ram1;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=1;
}
else
//if((key_ram0&KEY_SET)==0)
if(key_ram0!=KEY_SET)
{
key_ram1=0;
key_ram2=0;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=0;
}
}
else
if(key_sel_bit==1) //SEL复合按键确认和退出
{
if((key_ram0==KEY_SEL)&&(key_ram1==key_ram2)&&(key_ram1!=KEY_SEL))
{
key_val=key_ram1;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=0;
key_sel_bit=1;
}
else
// if((key_ram0&KEY_SEL)==0)
if(key_ram0!=KEY_SEL)
{
key_ram1=0;
key_ram2=0;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_sel_bit=0;
key_set_bit=0;
}
}
else
if((key_ram0==0)&&(key_ram1==key_ram2)&&(key_ram1!=0)) //单独按键检测和运算确认
{
key_val=key_ram1;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=0;
key_sel_bit=0;
}
else
if((key_ram0==KEY_SET)&&(key_ram1==key_ram2)&&(key_ram1!=KEY_SET)&&(key_ram1!=0))//SET复合按键检测
{
key_val=key_ram1;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=1;
key_sel_bit=0;
}
else
if((key_ram0==KEY_SEL)&&(key_ram1==key_ram2)&&(key_ram1!=KEY_SEL)&&(key_ram1!=0))//SEL复合按键检测
{
key_val=key_ram1;
key_re_count=KEY_RE_COUNT0;
key_re_bit=0;
key_set_bit=0;
key_sel_bit=1;
}
else
if((key_ram0==key_ram1)&&(key_ram1==key_ram2)&&(key_ram0!=0)) //重复按键检测
{
if(--key_re_count==0)
{
key_val=(key_ram1+0x80);
key_re_count=KEY_RE_COUNT1;
key_re_bit=1;
key_set_bit=0;
key_sel_bit=0;
}
}
key_ram2=key_ram1;
key_ram1=key_ram0;
key_ram0=0;
key_count=5;
}
//********************************************************
//play_flagled(flagled_ram)
//根据flagled_ram数值 点亮对应led指示灯
//********************************************************
void display_flagled(unsigned char flagled_ram)
{
if((flagled_ram&0x01)!=0) LED_S1=1;else LED_S1=0;
if((flagled_ram&0x02)!=0) LED_S2=1;else LED_S2=0;
if((flagled_ram&0x04)!=0) LED_S3=1;else LED_S3=0;
if((flagled_ram&0x10)!=0) LED_S4=1;else LED_S4=0;
if((flagled_ram&0x20)!=0) LED_S5=1;else LED_S5=0;
if((flagled_ram&0x40)!=0) LED_S6=1;else LED_S6=0;
}
//********************************************************
//结束
//********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -