久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5939|回復(fù): 2
收起左側(cè)

Proteus仿真中12864液晶屏串行編程的感想(從ST7565R到仿真SED1565)

[復(fù)制鏈接]
ID:330938 發(fā)表于 2020-3-9 18:28 | 顯示全部樓層 |閱讀模式
因為這段特殊時期的原因,沒辦法回學(xué)校拿硬件,自然也就沒辦法調(diào)試,雖然硬件電路都搭好了,但沒法調(diào)試也就意味著不知道程序編寫是否有問題,所以就想著在protues上把硬件電路搭起來調(diào)試程序,因為單片機用的是stc的所以protues中直接用AT的就行了,但是到了12864液晶屏這部分就犯難了,protues庫中的液晶屏有好多種,而自己不確定用哪一種。最直接的方法就是問百度,但是百度上大多都是并行接口的方式搭建的電路,而我的實際電路用的是串行的(大家都懂得,實際電路中I/O口除非必要能省就省)。
無奈之下,只能自己研究,然后用了一兩個小時把問題的關(guān)鍵破解了,成功的實現(xiàn)串行通信控制12864液晶屏。不知道是這個太簡單了還是并行通信在這一問題上太過主流了,網(wǎng)上很少有這部分教程,所以今天就做個記錄。
實際電路中用的是一款國產(chǎn)的液晶屏,protues中用的是HDG1286F這個系列的液晶屏。經(jīng)過一番思考,很快就找到了問題的關(guān)鍵,驅(qū)動IC,LCD顯示的方式都是點陣這個沒什么好區(qū)別的,唯一有區(qū)別的是驅(qū)動IC,于是便找到了HDG12864F所使用的驅(qū)動IC-SED1565的數(shù)據(jù)手冊。
2020-03-09_175402.jpg


取下面兩款液晶屏來說,parallel data input是并行數(shù)據(jù)輸入,selectable lnterface是可選接口的意思,也就是說選擇parallel data input也就是第三款只能是并行接口,選擇selectable lnterface第四款才能有串并行選擇。這兩款的區(qū)別在硬件上就是第四款多了個P/S引腳。如下圖是數(shù)據(jù)手冊中對于P/S引腳的描述。
2020-03-09_180026.jpg



這里也給出兩款液晶屏在引腳上的對應(yīng)關(guān)系(串行模式下),如下圖所示,左邊是仿真中的引腳資料,右邊是實際硬件的液晶引腳資料。
2020-03-09_180416.jpg


protues中實際接線圖如下所示,懸空部分為不需要接的。
2020-03-09_175350.jpg

下邊附上液晶屏的初始化函數(shù)以及數(shù)字顯示函數(shù)
單片機源程序如下:
  1. #include <12864.h>
  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //小四號  ,縱向倒序
  6. sbit rs=P1^2;                //RS
  7. sbit reset=P2^0;         //RST
  8. sbit cs1=P2^1;                //CS
  9. sbit sid=P2^2;                //D7
  10. sbit sclk=P2^3;         //D6
  11. unsigned char code LCD_charNumber[11][7]=
  12. {
  13.                 {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00},//0
  14.                 {0x00,0x00,0x42,0x7F,0x40,0x00,0x00},//1
  15.                 {0x00,0x42,0x61,0x51,0x49,0x46,0x00},//2
  16.                 {0x00,0x21,0x41,0x45,0x4B,0x31,0x00},//3
  17.                 {0x00,0x18,0x14,0x12,0x7F,0x10,0x00},//4
  18.                 {0x00,0x27,0x45,0x45,0x45,0x39,0x00},//5
  19.                 {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00},//6
  20.                 {0x00,0x01,0x01,0x79,0x05,0x03,0x00},//7
  21.                 {0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8
  22.                 {0x00,0x06,0x49,0x49,0x29,0x1E,0x00},//9
  23.                 {0x00,0x66,0x16,0x08,0x34,0x33,0x00}, /*%  有待修改65*/
  24.                 };
  25. unsigned char code beijinghanzi[14][16]={                //背景漢字,微軟雅黑,小四號
  26.         {0x40,0x42,0xC6,0x0C,0x08,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x7C,0x00},
  27.         {0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x30,0x08},        //“記”字代碼
  28.         {0x00,0x40,0x42,0x52,0x52,0x52,0x52,0x52,0xD2,0x52,0x52,0x52,0x7E,0x40,0x40,0x40},
  29.         {0x00,0x10,0x11,0x11,0x0A,0x48,0x44,0x44,0x3F,0x06,0x0C,0x0A,0x12,0x11,0x20,0x00},        //“錄”字代碼
  30.         {0x00,0x00,0xFE,0x02,0x02,0x12,0x22,0x42,0x82,0xC2,0x62,0x12,0x0A,0x02,0x02,0x00},
  31.         {0x00,0x00,0x3F,0x20,0x28,0x24,0x22,0x23,0x21,0x21,0x23,0x26,0x24,0x20,0x20,0x00},        //“區(qū)”字代碼
  32.         {0x00,0x30,0x18,0xCC,0x22,0x00,0x2C,0x52,0x52,0x52,0x52,0x52,0x52,0x7E,0x00,0x00},
  33.         {0x00,0x02,0x01,0x7E,0x00,0x08,0x19,0x29,0x09,0x89,0x89,0x89,0xFF,0x09,0x09,0x08},        //“得”字代碼
  34.         {0x80,0x80,0x40,0x20,0x10,0x0C,0x02,0x00,0x00,0x02,0x0C,0x10,0x20,0x40,0x80,0x00},
  35.         {0x00,0x80,0x41,0x41,0x21,0x1F,0x01,0x81,0x81,0x81,0x81,0x7D,0x02,0x00,0x00,0x00},        //“分”字代碼
  36.         {0x80,0x80,0x80,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x80,0x80},        
  37.         {0x20,0x20,0x3F,0x2A,0x2A,0x2A,0x2A,0x7F,0x62,0x46,0x2A,0x32,0x32,0x2A,0x46,0x40},        //“最”字代碼
  38.         {0x04,0x04,0x04,0x74,0x54,0x54,0x54,0x56,0x56,0x54,0x54,0x54,0x74,0x04,0x04,0x04},
  39.         {0x00,0x7F,0x01,0x01,0x3D,0x15,0x15,0x15,0x15,0x15,0x5D,0x41,0x41,0x41,0x7F,0x00},        //“高”字代碼
  40.         };
  41. unsigned char code defen[6][16]={
  42.         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空白
  43.         {0x00,0x10,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x10,0x18,0x14,0x12,0x11,0x10,0x00},//"2"
  44.         {0x00,0x80,0x40,0x20,0x10,0xF8,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x1F,0x02,0x00},//"4"
  45.         {0x00,0xE0,0x90,0x88,0x88,0x88,0x00,0x00,0x00,0x0F,0x10,0x10,0x10,0x10,0x0F,0x00},//"6"
  46.         {0x00,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00,0x0F,0x10,0x10,0x10,0x10,0x0F,0x00},//"8"
  47.         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空白
  48.         };
  49. unsigned char code maohao[]={0x00,0x00,0x30,0x30,0x00,0x00};//冒號        


  50. //*****************MS**************//
  51. void delay(int i)               
  52. {  int j,k;  
  53.         for(j=0;j<i;j++)  
  54.                 for(k=0;k<990;k++);
  55. }
  56. //*****************US****************//
  57. void delay1(int i)
  58. {        int j,k;  
  59.         for(j=0;j<i;j++)  
  60.                 for(k=0;k<10;k++);
  61. }
  62. //***************寫命令************//
  63. void transfer_command(int data1)   
  64. {        char i;  
  65.         cs1=0;
  66.         rs=0;  
  67.         for(i=0;i<8;i++)  
  68.         {   sclk=0;   
  69.                 if(data1&0x80) sid=1;   
  70.                 else sid=0;   
  71.                 delay1(5);   
  72.                 sclk=1;   
  73.                 delay1(5);   
  74.                 data1=data1<<=1;      
  75.         }
  76. }  
  77. //****************寫數(shù)據(jù)*************//
  78. void transfer_data(int data1)
  79. {        char i;  
  80.         cs1=0;  
  81.         rs=1;  
  82.         for(i=0;i<8;i++)  
  83.         {   sclk=0;   
  84.                 if(data1&0x80) sid=1;   
  85.                 else sid=0;  
  86.                  sclk=1;   
  87.                 data1=data1<<=1;   
  88.          }
  89. }
  90. //*****************清屏****************//
  91. void clear_screen(void)
  92. {        unsigned char i,j;  
  93.         for(i=0;i<9;i++)   
  94.         {        cs1=0;   
  95.                 transfer_command(0xb0+i);      
  96.                 transfer_command(0x10);   
  97.                 transfer_command(0x00);   
  98.                 for(j=0;j<132;j++)    transfer_data(0x00);        
  99.         }
  100. }  
  101. //***************LCD 初始化**************//
  102. void initial_lcd(void)
  103. {        reset=0;                 /*低電平復(fù)位*/   
  104.         delay(20);
  105.         reset=1;                            /*復(fù)位完畢*/   
  106.         delay(20);         
  107.         transfer_command(0xe2);  /*軟復(fù)位*/  
  108.         delay(5);  
  109.         transfer_command(0x2c);  /*升壓步聚 1*/  
  110.         delay(5);   
  111.         transfer_command(0x2e);  /*升壓步聚 2*/  
  112.         delay(5);  
  113.         transfer_command(0x2f);  /*升壓步聚 3*/  
  114.         delay(5);
  115.         transfer_command(0x23);  /*粗調(diào)對比度,可設(shè)置范圍 0x20~0x27*/  
  116.         transfer_command(0x81);  /*微調(diào)對比度*/
  117.         transfer_command(0x1f);  /*微調(diào)對比度的值,可設(shè)置范圍 0x00~0x3f*/  
  118.         transfer_command(0xa2);  /*1/9 偏壓比(bias)*/  
  119.         transfer_command(0xc0);  /*行掃描順序:從上到下,0是上下,8是下上*/  
  120.         transfer_command(0xa1);  /*列掃描順序:從左到右,0是左右,1是右左*/
  121.         transfer_command(0xa6);  /*正反顯示,7是高亮顯示,6是暗顯示*/
  122.         transfer_command(0x60);  /*起始行:第一行開始*/  
  123.         transfer_command(0xaf);  /*開顯示*/
  124. }


  125. //==================顯示分數(shù)===============//
  126. void lcd12864_disp(uchar num,uchar num2)
  127. {        char i,n;
  128.         if(num2==0) n = 3;
  129.         else n=0;
  130.         num = num/2;
  131.         transfer_command(0x13);                                //設(shè)置列地址的高4位
  132.         transfer_command(0x00);                                //設(shè)置列地址的低4位
  133.         transfer_command(0xb2+n);                                  //設(shè)置頁地址        
  134.         for(i=0;i<8;i++) transfer_data(defen[num][i]);
  135.         transfer_command(0x13);                                //設(shè)置列地址的高4位
  136.         transfer_command(0x00);                                //設(shè)置列地址的低4位
  137.         transfer_command(0xb3+n);                                  //設(shè)置頁地址        
  138.         for(i=8;i<16;i++) transfer_data(defen[num][i]);
  139.         
  140. }
  141. //*********************顯示數(shù)組***************//        
  142. void lcd12864_disp1(int num,unsigned int LINE_start,unsigned char ROW_start)
  143.                                         //要顯示的數(shù)字------- 第幾行(0-7)開始----第幾個列字符位置開始(0-17)
  144. {        unsigned int byte;
  145.         unsigned char column_add_L,column_add_H;
  146.         LINE_start = 0xb0 + LINE_start;
  147.         ROW_start =  ROW_start * 7;                                //+1
  148.         column_add_L =ROW_start&0x0f;
  149.         column_add_H =((ROW_start>>4)&0x0f)+0x10;               
  150.         cs1 = 0;
  151.         transfer_command(LINE_start);                                  //設(shè)置頁地址
  152.         transfer_command(column_add_H);                                //設(shè)置列地址的高4位
  153.         transfer_command(column_add_L);                                //設(shè)置列地址的低4位
  154.         for(byte=0;byte<7;byte++)        transfer_data(LCD_charNumber[num] [byte] );
  155. }
  156. void back(void)
  157. {        uchar i,j;
  158.         //顯示“記錄區(qū)”三字
  159.         for(j=0;j<6;j++){
  160.                 transfer_command(0x14);                                //設(shè)置列地址的高4位
  161.                 transfer_command(0x00);                                //設(shè)置列地址的低4位
  162.                 transfer_command(0xb2+j);                                  //設(shè)置頁地址
  163.                 for(i=0;i<16;i++) transfer_data(beijinghanzi[j][i]);}
  164.         //顯示“得分:”字樣
  165.         transfer_command(0x10);                                //設(shè)置列地址的高4位
  166.         transfer_command(0x08);                                //設(shè)置列地址的低4位
  167.         transfer_command(0xb2);                                  //設(shè)置頁地址
  168.         for(i=0;i<16;i++) transfer_data(beijinghanzi[6][i]);
  169.         for(i=0;i<16;i++) transfer_data(beijinghanzi[8][i]);
  170.         for(i=0;i<6;i++) transfer_data(maohao[i]);        
  171.         transfer_command(0x10);                                //設(shè)置列地址的高4位
  172.         transfer_command(0x08);                                //設(shè)置列地址的低4位
  173.         transfer_command(0xb3);                                  //設(shè)置頁地址
  174.         for(i=0;i<16;i++) transfer_data(beijinghanzi[7][i]);
  175.         for(i=0;i<16;i++) transfer_data(beijinghanzi[9][i]);
  176.         for(i=0;i<6;i++) transfer_data(maohao[i]);
  177.         //顯示“最高:”字樣
  178.         transfer_command(0x10);                                //設(shè)置列地址的高4位
  179.         transfer_command(0x08);                                //設(shè)置列地址的低4位
  180.         transfer_command(0xb5);                                  //設(shè)置頁地址
  181.         for(i=0;i<16;i++) transfer_data(beijinghanzi[10][i]);
  182.         for(i=0;i<16;i++) transfer_data(beijinghanzi[12][i]);
  183.         for(i=0;i<6;i++) transfer_data(maohao[i]);        
  184.         transfer_command(0x10);                                //設(shè)置列地址的高4位
  185.         transfer_command(0x08);                                //設(shè)置列地址的低4位
  186.         transfer_command(0xb6);                                  //設(shè)置頁地址
  187.         for(i=0;i<16;i++) transfer_data(beijinghanzi[11][i]);
  188.         for(i=0;i<16;i++) transfer_data(beijinghanzi[13][i]);
  189.         for(i=0;i<6;i++) transfer_data(maohao[i]);
  190.         //顯示各通道分值
  191.         lcd12864_disp1(8,0,2);
  192.         lcd12864_disp1(6,0,4);
  193.         lcd12864_disp1(4,0,6);
  194.         lcd12864_disp1(2,0,8);
  195.         lcd12864_disp1(2,0,10);
  196.         lcd12864_disp1(4,0,12);
  197.         lcd12864_disp1(6,0,14);
  198.         lcd12864_disp1(8,0,16);
  199. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:566575 發(fā)表于 2020-6-28 17:49 | 顯示全部樓層
為什么我的顯示內(nèi)容會向左旋轉(zhuǎn)90度
回復(fù)

使用道具 舉報

ID:56987 發(fā)表于 2021-2-24 14:31 | 顯示全部樓層
你的頭文件12864.h在哪里?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区久久精品 | 国产精品揄拍一区二区久久国内亚洲精 | 请别相信他免费喜剧电影在线观看 | 韩国欧洲一级毛片 | 一区二区小视频 | 久久99精品久久久久久狂牛 | 久久99精品国产自在现线小黄鸭 | 欧美久久久久 | 欧美日韩国产中文 | 老司机免费视频 | 国产1区2区在线观看 | 欧美午夜激情在线 | 国产成人精品一区二区三区在线 | 国产日韩欧美在线播放 | www.日韩| 日本黄色大片免费 | 精品久久久久久久 | 91精品国产一区二区在线观看 | 国产一区久久 | 免费观看一级黄色录像 | 欧美一区二区三区 | 久久av网站 | 中文字幕精品一区二区三区在线 | 亚洲精品乱码久久久久久9色 | 精品国产欧美 | 久久久久国产 | 国产视频二区 | 国产精品福利在线观看 | 欧美一区二区三区在线观看 | 高清视频一区 | 日韩av在线不卡 | 久久这里只有精品首页 | 小h片免费观看久久久久 | 国产精品久久久久久52avav | 久草免费在线视频 | 国产精品久久视频 | 色吊丝2 | 欧美视频免费在线 | 日韩综合在线播放 | 九九在线视频 | 欧美国产日韩在线 |