欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5556|回復: 0
收起左側

在12864顯示器上實現字符的旋轉和鏡象顯示(單片機程序+仿真)

[復制鏈接]
ID:404797 發表于 2019-3-14 13:23 | 顯示全部樓層 |閱讀模式
     12864液晶顯示器常用顯示模式是圖形模式,顯示字符要取字模以作圖方式顯示,不太方便,但也給我們提供了更豐富的顯示功能,便于實現旋轉、鏡象等特效,旋轉理論上說可以以任意角度旋轉,但這涉及到復雜的三角函數計算,本文不做研究,如有需要另文討論。本文只針對旋轉90、180、270度的情況,這三種情況不涉及三角函數計算,只涉及矩陣變換,比較簡單,也很實用,特別是網上的一些字模是橫向布置的,需要旋轉才能在12864上正常顯示,本文的旋轉顯示方法更顯有價值。除了旋轉外,也可以實現鏡象顯示,有水平方向的鏡象顯示和垂直方向的鏡象顯示,本文都進行探索。以下是程序仿真截圖。
12864A1.JPG
      上面第一行為原始狀態顯示,即沒有旋轉,是從網上抄的字模,可以看出不便于12864使用。
      第二行左中右分別為旋轉90度、180度、270度的顯示。
      第三行為垂直鏡象顯示和水平鏡象顯示。
      符件有完整的仿真設計和程序。

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. sbit rs=P2^3;
  5. sbit rw=P2^2;
  6. sbit E=P2^1;
  7. sbit cs1=P2^5;
  8. sbit cs2=P2^4;
  9. char cdata[][8]={{0x80,0x90,0x8c,0x84,0x84,0x84,0xf5,0x86},
  10.                  {0x84,0x84,0x84,0x84,0x94,0x8c,0x84,0x00},
  11.                  {0x00,0x80,0x80,0x84,0x46,0x49,0x28,0x10},
  12.                  {0x10,0x2c,0x23,0x40,0x80,0x00,0x00,0x00},
  13.                  {0xff,0xe7,0xe7,0xdb,0x81,0xbd,0x7e,0xff},
  14.                  {0xff,0xc1,0xbd,0xbd,0xc1,0xbd,0xbd,0xc1},
  15.                                  {0xff,0xc3,0xbd,0xfd,0xfd,0xbd,0xc3,0xff}
  16.                                  };
  17. void delay(int ii){int i;for(i=0;i<ii;i++);}
  18. //=======================================================
  19. void writeCmd(char c){E=0;rs=0;rw=0;E=1;P0=c;E=0;}
  20. void writeDat(char c){E=0;rs=1;rw=0;E=1;P0=c;E=0;}
  21. void set_xy(uchar x,uchar y){if(y>=64){cs2=0;cs1=1;y=y-64;}else{cs1=0;cs2=1;}writeCmd(0x40|y);writeCmd(0xb8|x);}
  22. void disp_HZ(uchar R,uchar L,uchar *p)
  23. {uchar i;
  24. for(i=0;i<16;i++){set_xy(2*R,16*L+i);writeDat(p[i]);
  25. set_xy(2*R+1,16*L+i);writeDat(p[i+16]);}
  26. }
  27. unsigned char HLR(char ii,unsigned char *cp){char i,c=0;for(i=7;i>=0;i--){c=c<<1;c|=(cp[i]>>ii)&0x01;}return c;}
  28. unsigned char HLL(char ii,unsigned char *cp){char i,c=0;for(i=0;i<8;i++){c=c<<1;c|=(cp[i]>>ii)&0x01;}return c;}
  29. unsigned char HLY(char ii,unsigned char *cp){char i,c=0;for(i=0;i<8;i++){c=c<<1;c|=(cp[ii]>>i)&0x01;}return c;}
  30. void ShowChar0(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(ch[i]);}
  31. void ShowChar90(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=7;i>=0;i--)writeDat(HLR(i,ch));}
  32. void ShowChar180(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=7;i>=0;i--)writeDat(HLY(i,ch));}
  33. void ShowChar270(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(HLL(i,ch));}
  34. void ShowCharY(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(HLY(i,ch));}
  35. void ShowCharX(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(ch[7-i]);}

  36. main()
  37. {int i,j;
  38. //cs1=0;cs2=0;
  39. disp_HZ(0,3,cdata[0]);
  40. for(j=0;j<3;j++)ShowChar0(0,j*8,cdata[j+4]);
  41. for(j=0;j<3;j++)ShowChar90(3,j*8,cdata[j+4]);
  42. for(j=0;j<3;j++)ShowChar180(3,j*8+32,cdata[j+4]);
  43. for(j=0;j<3;j++)ShowChar270(3,j*8+64,cdata[j+4]);
  44. for(j=0;j<3;j++)ShowCharY(5,j*8,cdata[j+4]);
  45. for(j=0;j<3;j++)ShowCharX(5,j*8+32,cdata[j+4]);
  46. while(1);
  47. }
復制代碼
0.png
所有資料51hei提供下載:
12864A1.zip (85.69 KB, 下載次數: 52)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表