?? 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 + -