网站导航: 首页 > 设计参考 > 正文 文章搜索
12232液晶汉字图形显示程序
 
文章编号:
090107152359
文章分类: 单片机 51系列
点 击:
...
关 键 词: 12232,液晶,LCD
文章来源:
网络
摘 要:

硬件:TG12232B (122*32)模拟口线接线方式
连接线图:
--------------------------------------------------|
|DB0-----P0.0 | DB4-----P0.4 | RW-------P1.1 | A0--------P1.0 |
|DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | V0接1K电阻到GND |
|DB2-----P0.2 | DB6-----P0.6 | E1-------P1.3 |
|DB3-----P0.3 | DB7-----P0.7 | E2-------P1.2 |
---------------------------------------------------


[注:AT89x52使用22.1184M或11.0592M晶振,实测使用22.1184M或11.0592都可以]
编译平台:Keil uV2 7.08

 
  1. //可能看起来有点乱,不过效果还是不错的,显示图形总的来说比显示汉字要简单,当然显示汉字也不难。   
  2. //希望此程序能给你一些帮助。   
  3.   
  4. #include <AT89X52.H>   
  5.   
  6. #define uchar unsigned char   
  7. #define uint unsigned int   
  8.   
  9. #define E1 P1_3 //块1 左边   
  10. #define E2 P1_2 //块2 右边   
  11. #define RW P1_1   
  12. #define A0 P1_0 //A0为1时是数据,0时为指令数据   
  13. #define DATA P0 //数据   
  14.   
  15. extern unsigned char code Bmpt1[];   
  16. extern unsigned char code Bmpt2[];   
  17. extern unsigned char code Bmpt3[];   
  18. extern unsigned char code Bmpt4[];   
  19. extern unsigned char code Bmpt5[];   
  20. extern unsigned char code Bmpt6[];   
  21. extern unsigned char code Bmpt7[];   
  22. extern unsigned char code Bmptc[];   
  23. extern unsigned char code bmp001[];   
  24. extern unsigned char code Bmp08[];   
  25. extern unsigned char code Bmp07[];   
  26. extern unsigned char code Bmp06[];   
  27. extern unsigned char code Bmp05[];   
  28. extern unsigned char code Bmp04[];   
  29. extern unsigned char code Bmp03[];   
  30. extern unsigned char code Bmp02[];   
  31. extern unsigned char code Bmp01[];   
  32. extern unsigned char code Bmp012[];   
  33. extern unsigned char code Bmp003[];   
  34. extern unsigned char code Bmp002[];   
  35.   
  36.   
  37. //延时   
  38. void delay(unsigned int i)   
  39. {   
  40.     unsigned char k=200;    
  41.     while(i>0)   
  42.     {   
  43.         i--;   
  44.     }   
  45.     while(k>1)k--;   
  46. }   
  47.   
  48. //左页   
  49. //发送数据   
  50. void OUTMD(unsigned char i)   
  51. {   
  52.     A0=1; //写数据   
  53.     //delay(5);   
  54.     E1=1;   
  55.     //delay(10);   
  56.     DATA=i;   
  57.     //delay(5);   
  58.     E1=0;   
  59.        
  60. }   
  61. //左页   
  62. //发送命令   
  63. void OUTMI(unsigned char i)   
  64. {   
  65.     A0=0; //写指令   
  66.     //delay(5);   
  67.     E1=1;   
  68.     //delay(10);   
  69.     DATA=i;   
  70.     //delay(5);   
  71.     E1=0;   
  72.        
  73. }   
  74. //右页   
  75. //发送数据   
  76. void OUTSD(unsigned char i)   
  77. {   
  78.     A0=1; //写数据   
  79.     //delay(5);   
  80.     E2=1;   
  81.     //delay(10);   
  82.     DATA=i;   
  83.     //delay(5);   
  84.     E2=0;   
  85.        
  86. }   
  87. //右页   
  88. //发送命令   
  89. void OUTSI(unsigned char i)   
  90. {   
  91.     A0=0; //写指令   
  92.     //delay(5);   
  93.     E2=1;   
  94.     //delay(10);   
  95.     DATA=i;   
  96.     //delay(5);   
  97.     E2=0;   
  98.        
  99. }   
  100.   
  101.   
  102. //初始化   
  103. void lcdini(void)   
  104. {   
  105.     RW=0;   
  106.     OUTMI(0XE2);   
  107.     OUTSI(0XE2);//复位   
  108.     OUTMI(0XAE);   
  109.     OUTSI(0XAE);//POWER SAVE   
  110.     OUTMI(0XA4);   
  111.     OUTSI(0XA4);//动态驱动   
  112.     OUTMI(0XA9);   
  113.     OUTSI(0XA9);//1/32占空比   
  114.     OUTMI(0XA0);   
  115.     OUTSI(0XA0);//时钟线输出   
  116.     OUTMI(0XEE);   
  117.     OUTSI(0XEE);//写模式   
  118.        
  119.     OUTMI(0X00);   
  120.     OUTMI(0XC0);   
  121.     OUTSI(0X00);   
  122.     OUTSI(0XC0);   
  123.        
  124.     OUTMI(0XAF);   
  125.     OUTSI(0XAF);   
  126.        
  127. }   
  128. /*  
  129. 函数说明:同时设置主从显示页为0-3页。(内函数,私有,用户不直接调用)  
  130. ------------------------------------------------------------------------  
  131. */  
  132. void SetPage(uchar page0,uchar page1)   
  133. {   
  134.     OUTMI(0xB8|page1);OUTSI(0xB8|page0);   
  135. }   
  136.   
  137. /*  
  138. --------------------------------------------------------------------------------  
  139. 函数说明:同时设置主从列地址为0-121。(内函数,私有,用户不直接调用)  
  140. --------------------------------------------------------------------------------  
  141. */  
  142. void SetAddress(uchar address0,uchar address1)   
  143. {   
  144.     OUTMI(address1);OUTSI(address0);   
  145. }   
  146.   
  147. /*  
  148. --------------------------------------------------------------------------------  
  149.  
  150.   调用方式:void PutChar0(uchar ch)  
  151.   函数说明:在右页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)  
  152.   --------------------------------------------------------------------------------  
  153. -*/  
  154. void PutCharR(uchar ch)   
  155. {   
  156.     OUTSD(ch);   
  157. }   
  158.   
  159. /*  
  160. --------------------------------------------------------------------------------  
  161.  
  162.   调用方式:void PutChar1(uchar ch)  
  163.   函数说明:在左页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)  
  164.   --------------------------------------------------------------------------------  
  165. -*/  
  166. void PutCharL(uchar ch)   
  167. {   
  168.     OUTMD(ch);   
  169. }    
  170.   
  171. /*  
  172. --------------------------------------------------------------------------------  
  173.  
  174.   调用方式:void DrawBmp(bit layer,uchar width,uchar *bmp)  
  175.   函数说明:画一个图,layer表示上下层,width是图形的宽,高都是16,bmp是  
  176.   图形指针  
  177.   使用zimo3软件,纵向取模,字节倒序/240字节  
  178.   --------------------------------------------------------------------------------  
  179. -*/  
  180. void DrawBmp(bit layer,uchar width,uchar *bmp)   
  181. {   
  182.     uchar x,address,i=0; //address表示显存的物理地址   
  183.     uchar page=0; //page表示上下两页   
  184.     bit window=0; //window表示左右两页   
  185.     //putcharR //右边   
  186.     //putcharL //左边   
  187.        
  188.     for (x=width;x>1;x--)   
  189.     {   
  190.         if (i>60) {window=1;address=i%61;}   
  191.         else address=i;    
  192.            
  193.         if(layer==0) //显示一行八个字   
  194.         {   
  195.             SetPage(0,0);   
  196.             SetAddress(address,address);   
  197.             if(window==1)PutCharR(bmp[i]);   
  198.             else PutCharL(bmp[i]);   
  199.             SetPage(1,1);   
  200.             SetAddress(address,address);   
  201.             if(window==1)PutCharR(bmp[i+width]);   
  202.             else PutCharL(bmp[i+width]);   
  203.         }   
  204.         else  
  205.         { //显示第二行八个汉字   
  206.             SetPage(2,2);   
  207.             SetAddress(address,address);   
  208.             if(window==1)PutCharR(bmp[i]);   
  209.             else PutCharL(bmp[i]);   
  210.             SetPage(3,3);   
  211.             SetAddress(address,address);   
  212.             if(window==1)PutCharR(bmp[i+width]);   
  213.             else PutCharL(bmp[i+width]);   
  214.         }   
  215.         i++;   
  216.            
  217.     }   
  218. }   
  219.   
  220.   
  221. /*  
  222. --------------------------------------------------------------------------------  
  223.  
  224.   调用方式:void clrscr(void)  
  225.   函数说明:清屏  
  226.   --------------------------------------------------------------------------------  
  227. -*/  
  228. void clrscr(void)   
  229. {   
  230.     uchar i;   
  231.     uchar page;   
  232.     for (page=0;page<4;page++)   
  233.     {   
  234.         SetPage(page,page);   
  235.         SetAddress(0,0);   
  236.         for (i=0;i<61;i++){PutCharR(0);PutCharL(0);}   
  237.     }   
  238. }    
  239.   
  240. //-----------------------------------------------------------   
  241. //图片显示   
  242. //采用字模2生成或字模3生成的都可以.   
  243. //-----------------------------------------------------------   
  244. void DrawBmp1(uint x_add, uchar width,uchar *bmp)   
  245. {   
  246.     uchar x,address,i=0; //address表示显存的物理地址   
  247.     uchar page=0; //page表示上下两页   
  248.     bit window=0; //window表示左右两页   
  249.     //putcharR //右边   
  250.     //putcharL //左边   
  251.     for (x=width;x>1;x--)   
  252.     {   
  253.         if (x_add>60) {window=1;address=x_add%61;}   
  254.         else address=x_add;    
  255.            
  256.            
  257.         SetPage(0,0);   
  258.         SetAddress(address,address);   
  259.         if(window==1)PutCharR(bmp[i]);   
  260.         else PutCharL(bmp[i]);   
  261.         SetPage(1,1);   
  262.         SetAddress(address,address);   
  263.         if(window==1)PutCharR(bmp[i+width]);   
  264.         else PutCharL(bmp[i+width]);   
  265.            
  266.            
  267.         SetPage(2,2);   
  268.         SetAddress(address,address);   
  269.         if(window==1)PutCharR(bmp[i+width+width]);   
  270.         else PutCharL(bmp[i+width+width]);   
  271.         SetPage(3,3);   
  272.         SetAddress(address,address);   
  273.         if(window==1)PutCharR(bmp[i+width+width+width]);   
  274.         else PutCharL(bmp[i+width+width+width]);    
  275.         i++;   
  276.         x_add++;   
  277.            
  278.     }   
  279. }   
  280.   
  281. //---------------------------------------------------------------   
  282. //---------------------------------------------------------------   
  283. //采用zimo2 显示汉字,以汉字的显示方式   
  284. //void Draw_word(uchar d_where,uint x_add,bit layer,uchar width)   
  285. //d_where表示在码表中第几个汉字,x_add横坐标位置,layer显示的层, width显示的宽度。   
  286. //---------------------------------------------------------------   
  287.   
  288.   
  289. void Draw_word(uchar d_where,uint x_add,bit layer,uchar width)   
  290. {   
  291.     uchar x,i=0,address; //address表示显存的物理地址   
  292.     uchar page=0; //page表示上下两页   
  293.     bit window=0; //window表示左右两页   
  294.     //putcharR //右边   
  295.     //putcharL //左边   
  296.     d_where=d_where*32;   
  297.        
  298.     for (x=width;x>1;x--)   
  299.     {   
  300.         if (x_add>60) {window=1;address=x_add%61;}   
  301.         else address=x_add;    
  302.            
  303.         if(layer==0) //显示一行八个字   
  304.         {   
  305.                
  306.             SetPage(0,0);   
  307.             SetAddress(address,address);   
  308.             if(window==1)PutCharR(bmp001[d_where]);//右边   
  309.             else PutCharL(bmp001[d_where]);//左边   
  310.             SetPage(1,1);   
  311.             SetAddress(address,address);   
  312.             if(window==1)PutCharR(bmp001[d_where+width]);   
  313.             else PutCharL(bmp001[d_where+width]);   
  314.                
  315.         }   
  316.         else  
  317.         { //显示第二行八个汉字   
  318.             SetPage(2,2);   
  319.             SetAddress(address,address);   
  320.             if(window==1)PutCharR(bmp001[d_where]);//右边   
  321.             else PutCharL(bmp001[d_where]);//左边   
  322.             SetPage(3,3);   
  323.             SetAddress(address,address);   
  324.             if(window==1)PutCharR(bmp001[d_where+width]);   
  325.             else PutCharL(bmp001[d_where+width]);   
  326.                
  327.         }   
  328.         x_add++;   
  329.         d_where++;   
  330.     }   
  331. }   
  332. /*  
  333. //------------------------------------------------------------------  
  334. //字模2显示一个汉字  
  335. //纵向取模,字节倒序  
  336. void disp_one(bit top_low,bit widows,uchar address,uchar width,uchar*bmp)  
  337.  
  338. if(top_low==0)  
  339. {  
  340. SetPage(0,0);  
  341. SetAddress(address,address);  
  342. if(window==1)PutCharR(bmp001[next][i]);  
  343. else PutCharL(bmp001[next][i]);  
  344. SetPage(1,1);  
  345. SetAddress(address,address);  
  346. if(window==1)PutCharR(bmp001[next][i+width]);  
  347. else PutCharL(bmp001[next][i+width]);  
  348. }  
  349. else  
  350. {  
  351. SetPage(0,0);  
  352. SetAddress(address,address);  
  353. if(window==1)PutCharR(bmp001[next][i]);  
  354. else PutCharL(bmp001[next][i]);  
  355. SetPage(1,1);  
  356. SetAddress(address,address);  
  357. if(window==1)PutCharR(bmp001[next][i+width]);  
  358. else PutCharL(bmp001[next][i+width]);  
  359. }  
  360. }  
  361. */  
  362.   
  363.   
  364. //液晶显示规则   
  365. // M(左) S(右)   
  366. // page page   
  367. // 0 | 0   
  368. // 1 | 1   
  369. // 2 | 2   
  370. // 3 | 3   
  371.   
  372. void delay1s(unsigned char i)   
  373. {   
  374.     while(i>1)   
  375.     {   
  376.         i--;   
  377.            
  378.         delay(65530);   
  379.     }   
  380. }   
  381.   
  382. //显示动态的等待图标   
  383. void wait1(unsigned char i)   
  384. {   
  385.     for(;i>1;i--)   
  386.     {delay1s(2);   
  387.     clrscr(); //   
  388.     DrawBmp1(0,60,Bmptc); //   
  389.     DrawBmp1(76,19,Bmpt1); //   
  390.     delay1s(2);   
  391.     clrscr(); //   
  392.     DrawBmp1(0,60,Bmptc); //   
  393.     DrawBmp1(76,19,Bmpt2); //   
  394.     delay1s(2);   
  395.     clrscr(); //   
  396.     DrawBmp1(0,60,Bmptc); //   
  397.     DrawBmp1(76,19,Bmpt3); //   
  398.     delay1s(2);   
  399.     clrscr(); //   
  400.     DrawBmp1(0,60,Bmptc); //   
  401.     DrawBmp1(76,19,Bmpt4); //   
  402.     delay1s(2);   
  403.     clrscr(); //   
  404.     DrawBmp1(0,60,Bmptc); //   
  405.     DrawBmp1(76,19,Bmpt5); //   
  406.     delay1s(2);   
  407.     clrscr(); //   
  408.     DrawBmp1(0,60,Bmptc); //   
  409.     DrawBmp1(76,19,Bmpt6); //   
  410.     delay1s(2);   
  411.     clrscr(); //   
  412.     DrawBmp1(0,60,Bmptc); //   
  413.     DrawBmp1(76,19,Bmpt7); //   
  414.     }   
  415.        
  416. }   
  417.   
  418.   
  419. //演示程序   
  420. void main()    
  421. {    
  422.        
  423.     lcdini(); //reset    
  424.     clrscr(); //clr    
  425.        
  426.        
  427.     Draw_word(0,0,0,16); //   
  428.     Draw_word(1,16,0,16); //   
  429.     Draw_word(2,32,0,16); //   
  430.     Draw_word(3,48,0,16); //   
  431.     Draw_word(0,64,0,16); //   
  432.     Draw_word(1,80,0,16); //   
  433.     Draw_word(2,96,0,16); //   
  434.        
  435.     DrawBmp(1,120,Bmp002); //   
  436.     clrscr(); //   
  437.     delay1s(3);   
  438.     DrawBmp1(0,122,Bmp012); //LOGO   
  439.     while(1)   
  440.     {   
  441.         delay1s(3);   
  442.            
  443.         clrscr(); //   
  444.         DrawBmp1(10,101,Bmp07); //   
  445.            
  446.         delay1s(8);   
  447.         clrscr(); //   
  448.         wait1(3);   
  449.         DrawBmp1(0,122,Bmp04); //   
  450.         delay1s(8);   
  451.         clrscr(); //   
  452.         wait1(3);   
  453.         DrawBmp1(0,122,Bmp03); //超前科技   
  454.         delay1s(8);   
  455.         clrscr(); //   
  456.         wait1(3);   
  457.         clrscr(); //   
  458.         DrawBmp1(10,101,Bmp05); //   
  459.         delay1s(8);   
  460.         clrscr(); //   
  461.         wait1(3);   
  462.         clrscr(); //   
  463.         DrawBmp1(10,101,Bmp06); //   
  464.         delay1s(8);   
  465.         clrscr(); //   
  466.         wait1(3);   
  467.         clrscr(); //   
  468.         DrawBmp1(10,101,Bmp08); //   
  469.         delay1s(8);   
  470.         clrscr(); //   
  471.         wait1(3);   
  472.         clrscr(); //   
  473.         DrawBmp1(0,122,Bmp01); //这仿真器真不错,用过都说好.   
  474.         wait1(8);   
  475.     }    
  476. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4