- 液晶显示程序
- void busy12864()
- {
- lcdDat=0xff; //口线置1,防止干扰
- rs=0; rw=1; //置“命令、读”模式
- //en=1; while(lcdDat&0x80); en=0;//忙等待
- }
- /** 写命令 参数:comDat为要发送的命令 **/
- void WriteCom(uchar comDat)
- {
- busy12864(); //忙,则等待
- rs=0;rw=0; //置“命令、写”模式
- lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
- }
- /** 写数据 参数:dat为要发送的数据 **/
- void WriteDat(uchar dat){
- busy12864(); //忙,则等待
- rs=1;rw=0; //置“数据、写”模式
- lcdDat=dat;en=1;en=0; //送出数据,并使之有效
- }
- /******** 任意尺寸点阵显示函数 ***********|
- |参数:显示位置:row页数,col列号, |
- | 字符大小:x横向像素,y纵向页数 |
- | 显示内容:tab字模表 ******/
- void showXY(uchar row,uchar col,uchar x,uchar y,uchar *tab){
- uchar i,j;
- bit right;
- if(col<64){right=0;}
- else {col-=64;right=1;}
- for(i=0;i<y;i++){
- if(right)cs1=1,cs2=0;
- else cs1=0,cs2=1;
- WriteCom(addX0+row+i);
- WriteCom(addY0+col);
- for(j=0;j<x;j++){
- if(col+j<64)WriteDat(tab[i*x+j]);
- else if(right==0)
- {
- cs1=1,cs2=0;
- WriteCom(addX0+row+i);
- WriteCom(addY0+(col+j-64));
- WriteDat(tab[i*x+j]);
- }
- }
- }
- }
- /* 返回一个8*16字符索引位置 */
- uchar enN(uchar *s){
- uchar i;
- for(i=0;zm8x16_index[ i]!=0;i++)
- if(zm8x16_index[ i]==s[0])break;
- return i;
- }
- /* 返回一个16*16字符索引位置 */
- uchar cnN(uchar *s){
- uchar i;
- for(i=0;zm16x16_index[ i]!=0;i+=2)
- if(zm16x16_index[ i]==*s&&zm16x16_index[i+1]==*(s+1))break ;
- return i/2;
- }
- /* 显示中英文字符串 */
- void showStr(uchar row,uchar col,uchar *s)
- {
- uchar i;
- for(i=0;s[ i]!=0;i++){
- if(s[ i]<0x80){
- showXY(row,col,8,2,zm8x16_Table[enN(&s[ i])]);
- col+=8;
- }else{
- showXY(row,col,16,2,zm16x16_Table[cnN(&s[ i])]);
- col+=16;i+=1;
- }
- if(col>120)
- {
- col=0;
- row+=2;
- }
- }
- }
|