📄 lm6800.c
字号:
{ OutPutData.amount=*(data_temp+1); OutPutData.OutData=*data_temp; OutPutData.AddNum +=2; } } else { OutPutData.amount=1; OutPutData.OutData=*data_temp; OutPutData.AddNum +=1; }} //------------------------------图形解压算法处理------------------------------------//------------------------------------//功 能:写一屏图形192*64//函数描述:void w_data_bmp(uint *p_data){ uchar j; uchar i=0,pager=0,datatemp=0,col_add=0; LCD_RW=0; _nop_();_nop_(); LCD_RS=0; delay100us(); OutPutData.amount=0; //压缩处理 for(pager=0;pager<8;pager++) { for(j=0;j<4;j++) { i=64; s_chip(j); delay100us(); datatemp = 0xb8|pager; //写页 wcode(datatemp); _nop_();_nop_(); datatemp = 0x40|col_add; //0xc0 //写列地址 wcode(datatemp); _nop_();_nop_(); while(i>0) { if(OutPutData.amount==0) { Decompression(p_data); p_data +=OutPutData.AddNum; } wdata(OutPutData.OutData); OutPutData.amount--; i--; } } }}//------------------------------------ void w_data_entw() //显示托微英文{ w_data_page(1,64,topway_en1,6); w_data_page(2,40,topway_en2,14);}//------------------------------------ void w_data_allscreen(uint *p_data) //显示英文{ uchar k; uchar col_add=0; for(k=0;k<8;k++) { w_data_page(k,0,p_data,6); w_data_page(k,48,p_data,6); w_data_page(k,96,p_data,6); w_data_page(k,144,p_data,6); w_data_page(k,192,p_data,6); w_data_page(k,240,p_data,6); }}//------------------------------------------------------------------------------------------------//以下是应用函数//------------------------------------------------------------------------------------------------//功 能:显示多屏图形void w_data_tu(uchar i){ switch(i) { case 0: w_data_bmp(HZ0); break; case 1: break; } }void wr_dis_h(uchar aa,bb){ uchar i,j,k; uchar col_add=0;for(k=0;k<4;k++){ col_add=0; s_chip(k); for(j=0;j<8;j++) { wcode(0xb8|j); for(i=0;i<32;i++) { wdata(aa); wdata(bb); } }}}//------------------------------------------------------------------------------------------------//以下是演示函数//------------------------------------------------------------------------------------------------void wr_dis(uchar dis_data){ uchar i,j,k,pager_temp;for(k=0;k<4;k++){ s_chip(k); for(i=0;i<8;i++) { pager_temp=0xb8|i; //写页 wcode(pager_temp); for(j=0;j<64;j++) wdata(dis_data); }}}void dis_test(uchar dis_number) //screen number:2,6,7,10,11,12,13{ switch(dis_number) { case 1: wr_dis(0xff); break; case 2: wr_dis(0x00); break; case 3: wr_dis(0x55); break; case 4: wr_dis(0xaa); break; case 5: wr_dis_h(0x55,0xaa); break; case 6: wr_dis_h(0xaa,0x55); break; case 7: wr_dis_h(0xff,0x00); break; case 8: wr_dis_h(0x00,0xff); break; default: error_num=2; break; }}void display_frame(){ uchar i,j,k,m; dis_test(2);for(m=0;m<4;m++){ s_chip(m); wcode(0xb8|0); wcode(0x40); wdata(0xff); for(k=0;k<62;k++) wdata(0x01); wdata(0xff); for(j=1;j<7;j++) { wcode(0xb8|j); wcode(0x40); wdata(0xff); for(i=0;i<62;i++) wdata(0x00); wdata(0xff); } wcode(0xb8|7); wcode(0x40); wdata(0xff); for(k=0;k<62;k++) wdata(0x80); wdata(0xff);}}//------------------------------------------------------------------------------------------------//以下是按键功能函数//------------------------------------------------------------------------------------------------void time0_scan() interrupt 1 using 2{ bit cs11=0,cs22=0; cs11=LCD_CS1; cs22=LCD_CS2; LCD_CS1=1; LCD_CS2=1; temp_P1=P1; temp_P3=P3; key_temp=0x00; P1=temp_P1|0x0f; P3=temp_P3&0xfe; _nop_();_nop_(); _nop_();_nop_(); key_temp=P1|0xf0; _nop_();_nop_(); _nop_(); if(key_temp==0xfe) { key1=0; key2=0; key3=0; key4=0; }//key1按下时为单步 else if(key_temp==0xfd) { key2=1; key3=0; key4=0; } else if(key_temp==0xfb) { key3=1; key2=0; key4=0; } else if(key_temp==0xf7) { key4=1; key2=0; key3=0; } TH0=0xe1; TL0=0xdf;//置定时器1初值0xffff-20000 P3=temp_P3|1; P1=temp_P1; _nop_();_nop_(); _nop_(); LCD_CS1=cs11; LCD_CS2=cs22; _nop_();_nop_(); _nop_();_nop_();}uchar light_temp=0x18;uchar key2_t=0;uchar key3_t=0;void keyfun(){EA = 1;TR0 = 1; if(key1) //如果按下,即key1=1,表示处于单步状态 { for(;;) { if(key4) { key4=0; break; } if(!key1) break; } } EA = 0; TR0 = 0; if(!key1) delay500ms();}//---------------------------------------------------------------------------------void LCD_init(){ uchar i,j,k; for(k=0;k<3;k++) { LCD_RST=1; LCD_RST=0; delay1ms(); LCD_RST=1; delay1ms(); } for(k=0;k<4;k++) { s_chip(k); wcode(0x3e); //打开显示屏 wcode(0xc0); //置Z向首地址为0 wcode(0xB8); //置X地址为首页首列0 wcode(0x40); //置Y向首地址为0 for(i=0;i<8;i++) //clear lcd { wcode(0xb8|i); for(j=0;j<128;j++) wdata(0); } wcode(0x3f); //打开显示屏 } }//------------------------------------------------------------------------------------------------//以下是主函数//------------------------------------------------------------------------------------------------void main(){ delay1ms(); DATABUS=0xff; SP=0x60; LCD_RST=1; //LCD_RST=0;delay100ms();LCD_RST=1;delay100ms(); P3=0x98; LCD_CS1=1; LCD_CS2=1; LCD_RW=0; LCD_RS=0; EA = 0; /* disable interrupts */ LCD_init(); IE = 0x82; TMOD = 0x01; /* TMOD */ TH0=0xe1; TL0=0xdf;//置定时器1初值0xffff-20000 _nop_(); TR0 = 0; while(1) { dis_test(2); w_data_tu(0); delay500ms(); keyfun(); //显示托微电子 dis_test(1); delay500ms(); keyfun(); display_frame(); delay500ms(); keyfun(); dis_test(2); delay500ms(); keyfun(); dis_test(3); delay500ms(); keyfun(); dis_test(4); delay500ms(); keyfun(); dis_test(5); delay500ms(); keyfun(); dis_test(6); delay500ms(); keyfun(); dis_test(7); delay500ms(); keyfun(); dis_test(8); delay500ms(); keyfun(); w_data_allscreen(topway_a); delay500ms(); keyfun(); w_data_allscreen(topway_b); delay500ms(); keyfun(); w_data_allscreen(topway_c); delay500ms(); keyfun(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -