找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2838|回复: 1
收起左侧

LCD320240显示屏资料和驱动程序

[复制链接]
ID:682488 发表于 2020-10-14 11:08 | 显示全部楼层 |阅读模式
  1. #include "LCD.h"
  2. unchar code tab1[]={
  3. "成都市飞宇达中文字库液晶模块"
  4. "支持文字与绘图两种混和显示模式          "
  5. "支持2 Page 显示模式(And, Or, Nor, Xor)  "
  6. "内建两个显示 RAM,可做成4 灰阶的显示效果"
  7. "内建中文字库储存7602个标准GB码的简体中文"
  8. "提供全角(16x16)与半角(8x16) 文字显示模式"
  9. "内建8x8 键盘扫瞄界面(Key Scan)          "
  10. "光标、反白、闪烁功能,光标高度与宽度可调"
  11. "支持屏幕水平卷动及垂直卷动功能          "
  12. "内建512Byte SRAM 可自行造字             "
  13. "提供中/英文文字对齐功能                 "
  14. "显示字型可放大到32x32、48x48 或64x64    "
  15. "支持可将字型由ROM 直接读出使用          "
  16. "内建粗体字形与行距设定                  "
  17. "内建10-Bit ADC 支持触控屏幕应用         "
  18. };
  19. unchar d,h,m,s,n;
  20. unchar xHzTable1[64];
  21. //定义中文字库
  22. unchar code HZTable1[32]={
  23. 0x02,0x00,0x02,0x00,0x02,0x04,0x7F,0xFE,0x04,0x40,0x04,0x40,0x04,0x4C,0x0C,0x70,
  24. 0x0A,0x40,0x0A,0xA0,0x10,0xA0,0x11,0x10,0x22,0x18,0x24,0x0E,0x48,0x04,0x00,0x00,
  25. };//灰
  26. unchar code HZTable2[32]={
  27. 0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
  28. 0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,
  29. };//度
  30. unchar code HZTable3[32]={
  31. 0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x04,0x40,0x04,0x40,
  32. 0x44,0x48,0x24,0x48,0x14,0x50,0x14,0x60,0x04,0x40,0xFF,0xFE,0x00,0x00,0x00,0x00,
  33. };//显
  34. unchar code HZTable4[32]={
  35. 0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,
  36. 0x11,0x20,0x11,0x10,0x21,0x08,0x41,0x0C,0x81,0x04,0x01,0x00,0x05,0x00,0x02,0x00,  
  37. }; //示

  38. //$$$$$$$$$$$$
  39. unchar LCD_CmdRead(unchar Addr)
  40. {  
  41. unchar Data;  

  42. cs1=0;
  43. rs=1;
  44. rd=1;
  45. BUS=Addr;
  46. wr=0;
  47. wr=1;

  48. BUS=0XFF;
  49. rs=0;
  50. wr=1;
  51. rd=1;
  52. rd=0;
  53. Data=BUS;

  54. return Data;
  55. }
  56. //$$$$$$$$$$$$
  57. void LCD_CmdWrite(unchar cmdaddr)//8080
  58. {                cs1=0;
  59.                 rd=1;
  60.                 rs=1;
  61.                 BUS=cmdaddr;
  62.                 wr=0;
  63.                 wr=1;
  64.                 cs1=1;
  65. }

  66. //$$$$$$$$$$$$

  67. void LCD_DataWrite(unchar wrdata)
  68. {     
  69.       while(busy==0);
  70.                 cs1=0;
  71.                 rd=1;
  72.                 rs=0;
  73.                 BUS=wrdata;
  74.                 wr=0;
  75.                 wr=1;
  76.                 cs1=1;
  77. }
  78. ///////////////////////////////////////////
  79. void No_Snow_Mode(void)
  80. {
  81.   unchar temp;
  82.   temp=LCD_CmdRead(MISC);
  83.   temp&=0x7f;
  84.   LCD_CmdWrite(MISC);
  85.   LCD_DataWrite(temp);
  86. }
  87. ///////////////////////////////////////////
  88. void Snow_Mode(void)
  89. {
  90.   unchar temp;
  91.   temp=LCD_CmdRead(MISC);
  92.   temp|=0x80;
  93.   LCD_CmdWrite(MISC);
  94.   LCD_DataWrite(temp);
  95. }
  96. //******************X,Y坐标定位******************
  97. void LCD_GotoXY(unchar xx,unchar yy)
  98. {   LCD_CmdWrite(CURX);
  99.     LCD_DataWrite(xx);
  100.     LCD_CmdWrite(CURY);  
  101.     LCD_DataWrite(yy);
  102. }
  103. //***********存取DDRAM2*******************************
  104. void Access_Page2(void)
  105. {
  106.     unchar temp;       
  107.     temp=LCD_CmdRead(MAMR);
  108.     temp &=0xfe;
  109.     temp |=0x02;
  110.     LCD_CmdWrite(MAMR);
  111.     LCD_DataWrite(temp);
  112. }

  113. //$$$$$$$$$$$$
  114. void displays(unchar *m)
  115. {

  116.         unint iiii=0,pppp=0,c=0,eeee=0;
  117.         Snow_Mode();
  118.         LCD_CmdWrite(WLCR);
  119.         LCD_DataWrite(0x04);
  120.         LCD_CmdWrite(CURX);
  121.         LCD_DataWrite(0x00);
  122.         LCD_CmdWrite(CURY);  
  123.         LCD_DataWrite(0x00);
  124.         LCD_CmdWrite(MWCR);
  125.     for(eeee=0;eeee<3;eeee++)
  126.           {
  127.            c=0;
  128.            for(iiii=0;iiii<80;iiii++)
  129.            {
  130.                 for(pppp=0;pppp<40;pppp++)
  131.             {
  132.                   LCD_DataWrite(m[c++]);
  133.             }   
  134.             }
  135.           }

  136. }
  137. //$$$$$$$$$$$$
  138. void lcd_grayscale_mode()
  139. {
  140.       unchar temp;
  141.       temp=LCD_CmdRead(MAMR);
  142.       temp&=0x8f;
  143.       temp|=0x03;
  144.       LCD_CmdWrite(MAMR);
  145.       LCD_DataWrite(temp);
  146. }
  147. //$$$$$$$$$$$$
  148. void display_gray(unchar x,unsigned char y,unchar *m)
  149. {
  150.   unchar temp_x,temp_y;
  151.   unint iiii=0,jjjj=0,c=0;
  152.   temp_x=x;temp_y=y;
  153.   Snow_Mode();
  154.   LCD_CmdWrite(WLCR);
  155.   LCD_DataWrite(0x04);
  156.   lcd_grayscale_mode();
  157.   for(iiii=0;iiii<128;iiii++)
  158.   {
  159.       LCD_GotoXY(temp_x,temp_y+iiii);
  160.       LCD_CmdWrite(0xb0);
  161.       for(jjjj=0;jjjj<40;jjjj++)
  162.       {
  163.         LCD_DataWrite(m[c++]);
  164.       }
  165.      }
  166. }
  167. ///////////////////////////////////////////
  168. void HzConvert(unchar *Hztable0,unchar *Hztable,unint number)
  169. //Hztable0为待转换的数据地址,Hztable为转换过后的数据地址,number为转换数据字节数
  170. {
  171.   unchar i=0,j=0,tem;
  172.   unint temp=0x0;
  173.   for(j=0;j<number;j++)
  174.   {
  175.    tem=0x80;
  176.    temp=0;
  177.    for(i=8;i>0;i--)
  178.     {
  179.      if(Hztable0[j]&tem)
  180.      {
  181.       temp|=0x03<<(i*2-2);
  182.      }
  183.      tem=tem>>1;
  184.     }
  185.     Hztable[j*2]=(temp>>8)&0xff;
  186.     Hztable[j*2+1]=temp&0xff;
  187.    }
  188. }
  189. //$$$$$$$$$$$$灰度模式下显示一个汉字
  190. //x:0~39; y:0~239
  191. void HzDisplayOne(unchar x,unchar y,unchar *m)
  192. {
  193. unchar temp_x,temp_y;
  194. unint iiii=0,jjjj=0,c=0;
  195. temp_x=x;temp_y=y;
  196. Snow_Mode();
  197. LCD_CmdWrite(WLCR);
  198. LCD_DataWrite(0x04);
  199. lcd_grayscale_mode();
  200. for(iiii=0;iiii<16;iiii++)
  201.   {
  202.       LCD_GotoXY(temp_x,temp_y+iiii);
  203.       LCD_CmdWrite(0xb0);
  204.       for(jjjj=0;jjjj<4;jjjj++)
  205.       {
  206.         LCD_DataWrite(m[c++]);
  207.       }
  208.      }
  209. }  
  210. ///////////////////////////////////////////一行显示4个汉字(在灰度模式下)
  211. //start_x:0~39;start_y:0~239;
  212. void writelinhz(unchar start_x,unchar start_y)
  213. {
  214.   HzConvert(HZTable1,xHzTable1,32);
  215.   HzDisplayOne(start_x,start_y,xHzTable1);
  216.         start_x+=2;
  217.         if(start_x>39)
  218.         {
  219.          start_y+=40;
  220.          start_x=0;
  221.          }
  222.   HzConvert(HZTable2,xHzTable1,32);
  223.   HzDisplayOne(start_x,start_y,xHzTable1);
  224.         start_x+=2;
  225.         if(start_x>39)
  226.         {
  227.          start_y+=40;
  228.          start_x=0;
  229.          }       
  230.   HzConvert(HZTable3,xHzTable1,32);
  231.   HzDisplayOne(start_x,start_y,xHzTable1);
  232.         start_x+=2;
  233.         if(start_x>39)
  234.         {
  235.          start_y+=40;
  236.          start_x=0;
  237.          }
  238.   HzConvert(HZTable4,xHzTable1,32);
  239.   HzDisplayOne(start_x,start_y,xHzTable1);
  240.         start_x+=2;
  241.         if(start_x>39)
  242.         {
  243.          start_y+=40;
  244.          start_x=0;
  245.          }
  246. }



  247. ///////////////////////////////////////////
  248. void lcd_inital()
  249. {
  250.         LCD_CmdWrite(WLCR);                //[00H] , Default --> 0x00
  251.         LCD_DataWrite(0x04);    //屏幕显示开启  disp_off输出high       

  252.         LCD_CmdWrite(MISC);                //[01H] , Default --> 0x00
  253.         LCD_DataWrite(0x08);

  254.         LCD_CmdWrite(ADSR);                //[03H] , Default --> 0x00
  255.         LCD_DataWrite(0x00);

  256.         LCD_CmdWrite(INTR);                //[0FH] , Default --> 0x00
  257.         LCD_DataWrite(0x00);

  258.         LCD_CmdWrite(WCCR);                //[10H] , Default --> 0x00
  259.         LCD_DataWrite(0x00);

  260.         LCD_CmdWrite(CHWI);                //[11H] , Default --> 0x00
  261.         LCD_DataWrite(0x00);

  262.         LCD_CmdWrite(MAMR);                //[12H] , Default --> 0x11
  263.         LCD_DataWrite(0x11);

  264.         LCD_CmdWrite(AWRR);                //[20H] , Default --> 0x27
  265.         LCD_DataWrite(39);

  266.         LCD_CmdWrite(DWWR);                //[21H] , Default --> 0x27
  267.         LCD_DataWrite(39);

  268.         LCD_CmdWrite(AWBR);                //[30H] , Default --> 0xEF       
  269.         LCD_DataWrite(239);

  270.         LCD_CmdWrite(DWHR);                //[31H] , Default --> 0xEF
  271.         LCD_DataWrite(239);

  272.         LCD_CmdWrite(AWLR);                //[40H] , Default --> 0x00
  273.         LCD_DataWrite(0x00);

  274.         LCD_CmdWrite(AWTR);                //[50H] , Default --> 0x00
  275.         LCD_DataWrite(0x00);

  276.         LCD_CmdWrite(CURX);                //[60H] , Default --> 0x00
  277.         LCD_DataWrite(0x00);

  278.         LCD_CmdWrite(BGSG);                //[61H] , Default --> 0x00
  279.         LCD_DataWrite(0x00);

  280.         LCD_CmdWrite(EDSG);                //[62H] , Default --> 0x00
  281.         LCD_DataWrite(0x00);

  282.         LCD_CmdWrite(CURY);                //[70H] , Default --> 0x00
  283.         LCD_DataWrite(0x00);

  284.         LCD_CmdWrite(BGCM);                //[71H] , Default --> 0x00
  285.         LCD_DataWrite(0x00);

  286.         LCD_CmdWrite(EDCM);                //[72H] , Default --> 0x00
  287.         LCD_DataWrite(0x00);

  288.         LCD_CmdWrite(BTMR);                //[80H] , Default --> 0x00
  289.         LCD_DataWrite(0x00);

  290.         LCD_CmdWrite(ITCR);                //[90H] , Default --> 0x00    需要调整
  291.         LCD_DataWrite(0x80);

  292.         LCD_CmdWrite(PNTR);                //[E0H] , Default --> 0x00
  293.         LCD_DataWrite(0x00);

  294.         LCD_CmdWrite(FNCR);                //[F0H] , Default --> 0x00
  295.         LCD_DataWrite(0x00);

  296.         LCD_CmdWrite(FVHT);                //[F1H] , Default --> 0x00
  297.         LCD_DataWrite(0x00);
  298. }

  299. /////////////////清屏子程序//////////////////////////
  300. void clear(void)
  301. {
  302.   No_Snow_Mode();
  303.   LCD_CmdWrite(WLCR);
  304.   LCD_DataWrite(0x04);     //选择绘图模式     
  305.   LCD_CmdWrite(PNTR);
  306.   LCD_DataWrite(0x00);
  307.   LCD_CmdWrite(FNCR);
  308.   LCD_DataWrite(0xa8);
  309.   Snow_Mode();
  310.   }
  311. //////////////全部显示子程序///////////////////////
  312. void display_all()
  313. {
  314.     No_Snow_Mode();
  315.     LCD_CmdWrite(WLCR);
  316.     LCD_DataWrite(0x04);     //选择绘图模式
  317.     LCD_CmdWrite(PNTR);
  318.     LCD_DataWrite(0xff);     //全部填0xff
  319.     LCD_CmdWrite(FNCR);
  320.     LCD_DataWrite(0xa8);
  321.     Snow_Mode();
  322. }
  323. //////////////装配测试用///////////////////////////
  324. void display_snows(unchar dat1,unchar dat2)
  325. {

  326.     unsigned int iiii=0,pppp=0;
  327.     Snow_Mode();
  328.     LCD_CmdWrite(WLCR);
  329.     LCD_DataWrite(0x04);   //选择绘图模式
  330.     LCD_CmdWrite(CURX);
  331.     LCD_DataWrite(0x00);   //设定X坐标位置
  332.     LCD_CmdWrite(CURY);  
  333.     LCD_DataWrite(0x00);    //设定Y坐标位置
  334.     LCD_CmdWrite(MWCR);
  335.            for(iiii=0;iiii<120;iiii++)
  336.            {
  337.                 for(pppp=0;pppp<40;pppp++)
  338.             {
  339.                   LCD_DataWrite(dat1);  
  340.             }   
  341.                         for(pppp=0;pppp<40;pppp++)
  342.             {
  343.                   LCD_DataWrite(dat2);  
  344.             }  
  345.            }


  346. }
  347. /////////////显示一行边框//////////////////////////////////

  348. void display_kuang(void)
  349. {

  350.         unsigned int n0,n1;
  351.         Snow_Mode();
  352.         LCD_CmdWrite(WLCR);
  353.         LCD_DataWrite(0x04);
  354.         LCD_CmdWrite(CURX);
  355.         LCD_DataWrite(0x00);
  356.         LCD_CmdWrite(CURY);  
  357.         LCD_DataWrite(0x00);
  358.         LCD_CmdWrite(MWCR);
  359.         for(n0=0;n0<40;n0++)
  360.                         LCD_DataWrite(0xff);

  361.         for(n0=0;n0<(238);n0++)               
  362.     {
  363.                 for(n1=0;n1<40;n1++)
  364.                 {
  365.                     if (n1==0)          LCD_DataWrite(0x80);
  366.                          else if (n1==39) LCD_DataWrite(0x01);
  367.                            else                LCD_DataWrite(0x00);
  368.         }
  369.         }

  370.         for(n0=0;n0<40;n0++)
  371.                         LCD_DataWrite(0xff);
  372. }

  373. /////////////显示中文字库和字符////////////////////
  374. void display_word(unchar code *cha, unint count )
  375. {
  376.         unint iiii=0;
  377.         No_Snow_Mode();
  378.         LCD_CmdWrite(WLCR);
  379.         LCD_DataWrite(0x0c);
  380.         LCD_CmdWrite(CURX);
  381.         LCD_DataWrite(0x00);
  382.         LCD_CmdWrite(CURY);  
  383.         LCD_DataWrite(0x00);
  384.         LCD_CmdWrite(MWCR);
  385.            for(iiii=0;iiii<count;iiii++)
  386.            {
  387.                LCD_DataWrite(*cha);  
  388.                ++cha;       
  389.             }   
  390. }
  391. /////////////在指定的坐标处显示字符串////////////////////
  392. void LCD_ShowStr(unchar xx,unchar yy,unchar *text)
  393. {
  394.         No_Snow_Mode();
  395. ……………………

  396. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


51hei.png

lcd320240资料和程序.7z

1.5 MB, 下载次数: 38, 下载积分: 黑币 -5

包含资料,程序

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:682488 发表于 2020-10-14 11:11 | 显示全部楼层
程序复制出来有乱码,源程序用keil5打开可以正常显示注释
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表