找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4393|回复: 3
收起左侧

lcd19264液晶的单片机测试程序

[复制链接]
ID:236933 发表于 2017-11-14 11:37 | 显示全部楼层 |阅读模式
19264液晶屏程序测试单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <Ctype.h>
  4. /* 按键*/
  5. sbit key=P2^4;
  6. /*19264引脚定义*/
  7. sbit cs1=P1^1;
  8. sbit reset=P1^0;
  9. sbit rs=P2^0;
  10. sbit sclk=P2^6;
  11. sbit sid=P2^5;
  12. sbit Rom_SCK=P1^3;
  13. sbit Rom_OUT=P1^4;
  14. sbit Rom_IN=P1^5;
  15. sbit Rom_CS=P1^2;
  16. /*  */
  17. #define uchar unsigned char
  18. #define uint unsigned int
  19. #define ulong unsigned long
  20. uchar code ascii_table_5x8[95][5];
  21. uchar code bmp1[];
  22. uchar code z[];
  23. uchar code k[];
  24. uchar code y[];
  25. uchar code b[];
  26. uchar code yi[];
  27. //LCD模块   写指令
  28. void transfer_command(int data1)
  29. {
  30.                 char i;
  31.                 cs1=0;
  32.                 rs=0;
  33.                 for(i=0;i<8;i++)
  34.                 {
  35.                         sclk=0;
  36.                         if(data1&0x80) sid=1;
  37.                         else sid=0;
  38.                         sclk=1;
  39.                         data1=data1<<=1;
  40.                 }
  41.                 cs1=1;
  42. }
  43. //写数据到LCD模块
  44. void transfer_data(int data1)
  45. {
  46.                 char i;
  47.                 cs1=0;
  48.                 rs=1;
  49.                 for(i=0;i<8;i++)
  50.                 {
  51.                         sclk=0;
  52.                         if(data1&0x80) sid=1;
  53.                         else sid=0;
  54.                         sclk=1;
  55.                         data1=data1<<=1;
  56.                 }
  57.                 cs1=1;
  58. }
  59. //??
  60. void delay(int i)
  61. {
  62.                 int j,k;
  63.                 for(j=0;j<i;j++)
  64.                  for(k=0;k<110;k++);
  65. }
  66. void waitkey()
  67. {
  68.                 //repeat:
  69.                 if(key==1)while(key==1);  //等待按键,如果没按就一直循环等待,或用while(key==1)不用goto也可
  70.           if(key==0)while(key==0);
  71.                 else delay(400);
  72. }

  73. //LCD 初始化
  74. void initial_lcd()
  75. {
  76.                 reset=0; //地点评复位
  77.                 delay(100);
  78.                 reset=1; //复位完毕
  79.                 delay(100);
  80.                 transfer_command(0xe2); //软复位
  81.                 delay(500);
  82.                 transfer_command(0x2f); //打开内部生压
  83.                 delay(500);
  84.                         transfer_command(0x81); //微调对比度
  85.                 transfer_command(0x45); //对比度值0x00~0xFF
  86.                 transfer_command(0xeb); //1/9 偏压比(bias)
  87.                 transfer_command(0xc4); //?????:???? oxc2
  88.                 transfer_command(0xa0); //?????:????
  89.                 transfer_command(0xaf); //开显示
  90. }
  91. void lcd_address(uchar page,uchar column)//行 列
  92. {
  93.                 column=column-1; //????????1 ?,?LCD ??IC ???0 ?????????1.
  94.                 page=page-1;
  95.                 transfer_command(0xb0+page); //?????????8 ???????64 ????8 ???????????1 ?,?LCD ??IC ???0 ?,???????1
  96.                 transfer_command(((column>>4)&0x0f)+0x10); //???????4 ?
  97.                 transfer_command(column&0x0f); //???????4 ?
  98. }
  99. //????
  100. void clear_screen()
  101. {
  102.                 unsigned char i,j;
  103.                 for(i=0;i<9;i++)
  104.                 {
  105.                         lcd_address(1+i,1);
  106.                         for(j=0;j<192;j++)
  107.                         {
  108.                           transfer_data(0x00);
  109.                         }
  110.                 }
  111. }
  112. void display_graphic_192x64(uchar *dp)
  113. {
  114.                 uchar i,j;
  115.                 for(i=0;i<9;i++)
  116.                 {
  117.                         lcd_address(1+i,1);
  118.                         for(j=0;j<192;j++)
  119.                         {
  120.                                 transfer_data(*dp);
  121.                                 dp++;
  122.                         }
  123.                 }
  124. }

  125. void display_graphic_32x32(uchar page,uchar column,uchar *dp)
  126. {
  127.                 uchar i,j;
  128.                 for(j=0;j<4;j++)
  129.                 {
  130.                         lcd_address(page+j,column);
  131.                         for (i=0;i<31;i++)
  132.                         {
  133.                                 transfer_data(*dp); //????LCD,?????8 ???????????1
  134.                                 dp++;
  135.                         }
  136.                 }
  137. }
  138. //??16x16 ????????????16x16 ???????
  139. void display_graphic_16x16(uchar page,uchar column,uchar *dp)
  140. {
  141.                 uchar i,j;
  142.                 for(j=0;j<2;j++)
  143.                 {
  144.                         lcd_address(page+j,column);
  145.                         for (i=0;i<16;i++)
  146.                         {
  147.                                 transfer_data(*dp); //????LCD,?????8 ???????????1
  148.                                 dp++;
  149.                         }
  150.                 }
  151. }
  152. //?? 8x16 ?????ASCII, ?8x16 ????????????
  153. void display_graphic_8x16(uchar page,uchar column,uchar *dp)
  154. {
  155.                 uchar i,j;
  156.                 for(j=0;j<2;j++)
  157.                 {
  158.                         lcd_address(page+j,column);
  159.                         for (i=0;i<8;i++)
  160.                         {
  161.                                 transfer_data(*dp); //????LCD,?????8 ???????????1
  162.                                 dp++;
  163.                         }
  164.                 }
  165. }

  166. void display_string_5x8(uint page,uint column,uchar reverse,uchar *text)
  167. {
  168.                 uchar i=0,j,k,data1;
  169.                 while(text[i]>0x00)
  170.                 {
  171.                         if((text[i]>=0x20)&&(text[i]<=0x7e))
  172.                         {
  173.                                 j=text[i]-0x20;
  174.                                 lcd_address(page,column);
  175.                                 for(k=0;k<5;k++)
  176.                                 {
  177.                                         if(reverse==1) data1=~ascii_table_5x8[j][k];
  178.                                         else data1=ascii_table_5x8[j][k];
  179.                                         transfer_data(data1);
  180.                                 }
  181.                                 if(reverse==1) transfer_data(0xff);
  182.                                 else transfer_data(0x00);
  183.                                 i++;
  184.                                 column+=6;
  185.                         }
  186.                         else
  187.                         i++;
  188.                 }
  189. }

  190. void send_command_to_ROM( uchar datu )
  191. {
  192.                 uchar i;
  193.                 for(i=0;i<8;i++ )
  194.                 {
  195.                         if(datu&0x80)
  196.                         Rom_IN = 1;
  197.                         else
  198.                         Rom_IN = 0;
  199.                         datu = datu<<1;
  200.                         Rom_SCK=0;
  201.                         Rom_SCK=1;
  202.                 }
  203. }
  204. /****??????IC ?????????(1 ???)***/
  205. static uchar get_data_from_ROM( )
  206. {
  207.                 uchar i;
  208.                 uchar ret_data=0;
  209.                 Rom_SCK=1;
  210.                 for(i=0;i<8;i++)
  211.                 {
  212.                         Rom_OUT=1;
  213.                         Rom_SCK=0;
  214.                         ret_data=ret_data<<1;
  215.                         if( Rom_OUT )
  216.                         ret_data=ret_data+1;
  217.                         else
  218.                         ret_data=ret_data+0;
  219.                         Rom_SCK=1;
  220.                 }
  221.                 return(ret_data);
  222. }
  223. /*?????(addrHigh:?????,addrMid:?????,addrLow:?????)?????DataLen ???
  224. ???? pBuff ???*/
  225. /*????*/
  226. void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uchar addrLow,uchar *pBuff,uchar DataLen )
  227. {
  228.                 uchar i;
  229.                 Rom_CS = 0;
  230.                 cs1=1;
  231.                 Rom_SCK=0;
  232.                 send_command_to_ROM(0x03);
  233.                 send_command_to_ROM(addrHigh);
  234.                 send_command_to_ROM(addrMid);
  235.                 send_command_to_ROM(addrLow);
  236.                 for(i = 0; i < DataLen; i++ )
  237.                 *(pBuff+i) =get_data_from_ROM();
  238.                 Rom_CS = 1;
  239. }
  240. /******************************************************************/
  241. ulong fontaddr=0;
  242. void display_GB2312_string(uchar y,uchar x,uchar *text)
  243. {
  244.                 uchar i= 0;
  245.                 uchar addrHigh,addrMid,addrLow ;
  246.                 uchar fontbuf[32];
  247.                 while((text[i]>0x00))
  248.                 {
  249.                         if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1))
  250.                         {
  251.                                 /*????(GB2312)?????IC ????????????:*/
  252.                                 /*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
  253.                                 /*????8 ???????????,????????*/
  254.                                 fontaddr = (text[i]- 0xb0)*94;
  255.                                 fontaddr += (text[i+1]-0xa1)+846;
  256.                                 fontaddr = (ulong)(fontaddr*32);
  257.                                 addrHigh = (fontaddr&0xff0000)>>16; /*????8?,?24?*/
  258.                                 addrMid = (fontaddr&0xff00)>>8; /*????8?,?24?*/
  259.                                 addrLow = fontaddr&0xff; /*????8?,?24?*/
  260.                                 get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*?32 ??????,??
  261.                                 "fontbuf[32]"*/
  262.                                 display_graphic_16x16(y,x,fontbuf);/*?????LCD?,y ????,x ????,fontbuf[]?
  263.                                 ??*/
  264.                                 i+=2;
  265.                                 x+=16;
  266.                         }
  267.                         else if((text[i]>=0x20) &&(text[i]<=0x7e))
  268.                         {
  269.                         unsigned char fontbuf[16];
  270.                         fontaddr = (text[i]- 0x20);
  271.                                 fontaddr = (unsigned long)(fontaddr*16);
  272.                         fontaddr = (unsigned long)(fontaddr+0x3b7c0);
  273.                         addrHigh = (fontaddr&0xff0000)>>16;
  274.                         addrMid = (fontaddr&0xff00)>>8;
  275.                         addrLow = fontaddr&0xff;
  276.                         get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,16 );/*?16 ??????,??
  277.                         "fontbuf[32]"*/
  278.                         display_graphic_8x16(y,x,fontbuf);/*??8x16?ASCII??LCD?,y ????,x ????,
  279.                         fontbuf[]???*/
  280.                         i+=1;
  281.                         x+=8;
  282.                         }
  283.                         else
  284.                         i++;
  285.                 }
  286. }
  287. void main(void)
  288. {
  289.           initial_lcd();
  290.                 clear_screen(); //clear all dots
  291.           display_string_5x8(1,1,0,"welcome use");
  292.                 display_graphic_32x32(3,10,z);
  293.           display_graphic_32x32(3,45,k);
  294.                 display_graphic_32x32(3,80,y);
  295.                 display_graphic_32x32(3,115,b);
  296.                 display_graphic_32x32(3,150,yi);
  297.           display_string_5x8(8,157,0,"key in");
  298.                 waitkey();
  299.                 while(1)
  300.                 {
  301.                                
  302.                 //                clear_screen();
  303.                           display_graphic_192x64(bmp1);
  304.                                 display_string_5x8(1,1,1," IAP15W4K58S4 ");display_string_5x8(1,120,1,"Step shaking");
  305.                                 display_string_5x8(3,1,0," Select>>>>");
  306.                                 display_string_5x8(3,100,1,"1.Mode 1");
  307.                                 display_string_5x8(4,100,0,"2.Mode 2" );
  308.                                 display_string_5x8(5,100,0,"3.Mode 3");
  309.                                 display_string_5x8(6,100,0,"4.Mode 4");
  310.                                 display_string_5x8(7,100,0,"5.Mode 5");
  311.                                 display_string_5x8(8,1,1,"Make By KBQ in WWW house");
  312.                                 waitkey();
  313.                          

  314.                  //                clear_screen();
  315.                     display_graphic_192x64(bmp1);
  316.                                 display_GB2312_string(1,1,"JLX19264G-333,带中文字库");
  317.                                 display_GB2312_string(3,1,"16X16简体汉字库,或8X16点");
  318.                                 display_GB2312_string(5,1,"阵ASCII,或5x8点阵ASCII码");
  319.                                 display_GB2312_string(7,1,"{<!@#$%^&*()_-+]/;.,?[>}");
  320.                                 waitkey();

  321.                 }
  322. }
  323. uchar code ascii_table_5x8[95][5]={
  324. /*??ASCII ??:5x8 ??*/
  325.         0x00,0x00,0x00,0x00,0x00,//- - //space
  326. 0x00,0x00,0x4f,0x00,0x00,//-!-
  327. 0x00,0x07,0x00,0x07,0x00,//-"-
  328. 0x14,0x7f,0x14,0x7f,0x14,//-#-
  329. 0x24,0x2a,0x7f,0x2a,0x12,//-$-
  330. 0x23,0x13,0x08,0x64,0x62,//-%-
  331. 0x36,0x49,0x55,0x22,0x50,//-&-
  332. 0x00,0x05,0x07,0x00,0x00,//-'-
  333. 0x00,0x1c,0x22,0x41,0x00,//-(-
  334. 0x00,0x41,0x22,0x1c,0x00,//-)-
  335. 0x14,0x08,0x3e,0x08,0x14,//-*-
  336. 0x08,0x08,0x3e,0x08,0x08,//-+-
  337. 0x00,0x50,0x30,0x00,0x00,//-,-
  338. 0x08,0x08,0x08,0x08,0x08,//---
  339. 0x00,0x60,0x60,0x00,0x00,//-.-
  340. 0x20,0x10,0x08,0x04,0x02,//-/-
  341. 0x3e,0x51,0x49,0x45,0x3e,//-0-
  342. 0x00,0x42,0x7f,0x40,0x00,//-1-
  343. 0x42,0x61,0x51,0x49,0x46,//-2-
  344. 0x21,0x41,0x45,0x4b,0x31,//-3-
  345. 0x18,0x14,0x12,0x7f,0x10,//-4-
  346. 0x27,0x45,0x45,0x45,0x39,//-5-
  347. 0x3c,0x4a,0x49,0x49,0x30,//-6-
  348. 0x01,0x71,0x09,0x05,0x03,//-7-
  349. 0x36,0x49,0x49,0x49,0x36,//-8-
  350. 0x06,0x49,0x49,0x29,0x1e,//-9-
  351. 0x00,0x36,0x36,0x00,0x00,//-:-
  352. 0x00,0x56,0x36,0x00,0x00,//-;-
  353. 0x08,0x14,0x22,0x41,0x00,//-<-
  354. 0x14,0x14,0x14,0x14,0x14,//-=-
  355. 0x00,0x41,0x22,0x14,0x08,//->-
  356. 0x02,0x01,0x51,0x09,0x06,//-?-
  357. 0x32,0x49,0x79,0x41,0x3e,//-@-
  358. 0x7e,0x11,0x11,0x11,0x7e,//-A-
  359. 0x7f,0x49,0x49,0x49,0x36,//-B-
  360. 0x3e,0x41,0x41,0x41,0x22,//-C-
  361. 0x7f,0x41,0x41,0x22,0x1c,//-D-
  362. 0x7f,0x49,0x49,0x49,0x41,//-E-
  363. 0x7f,0x09,0x09,0x09,0x01,//-F-
  364. ……………………

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

所有资料51hei提供下载:
19264测试.rar (41.87 KB, 下载次数: 115)

评分

参与人数 2黑币 +51 收起 理由
zzdren + 1 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:325069 发表于 2018-5-8 15:03 | 显示全部楼层
赞,多谢楼主分享 黑币各种不够用
回复

使用道具 举报

ID:48140 发表于 2019-12-12 21:48 | 显示全部楼层
谢谢你,还不会用。
回复

使用道具 举报

ID:854314 发表于 2021-1-5 17:25 | 显示全部楼层
这个再整点测试的图片及电路要求就更好了。先下来看看,希望不会浪费我的黑豆
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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