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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2086|回復: 3
打印 上一主題 下一主題
收起左側

12864 7920芯片帶中文字庫顯示實驗 輸出亂碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:541856 發表于 2019-5-19 09:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. //12864液晶的試驗程序,驅動芯片為ST7920
  2. //目標板為TS8900-M128
  3. //驅動方式-并口
  4. //J1,J15,J8短路塊位于左側
  5. //調節RV1電位器調整對比度
  6. //注意:因為廠家不同液晶的19腳和20腳(背光)有時會不同,導致背光不亮,需要注意。

  7. #include <iom128v.h>
  8. #include <string.h>

  9. #define uchar unsigned char
  10. #define uint unsigned int

  11. #define RS (1<<0)
  12. #define RW (1<<1)
  13. #define EN (1<<2)

  14. //延時函數
  15. void s_ms(uint ms)
  16. {
  17.         for(;ms>1;ms--);
  18. }        
  19. //此處定義字符串
  20. char text_1[]="液晶測試第一行";
  21. char text_2[]="液晶測試第二行";
  22. char text_3[]="液晶測試第三行";
  23. char text_4[]="液晶測試第四行";

  24. //寫數據
  25. void WriteDataLCM(unsigned char WDLCM)
  26. {
  27.         //ReadStatusLCM(); //檢測忙
  28.         s_ms(100);
  29.         PORTC|=RS;       //RS=1   
  30.         s_ms(100);
  31.         PORTC&=~RW;      //RW=0
  32.         s_ms(100);
  33.         PORTC|=EN;       //EN=1
  34.         s_ms(100);
  35.         PORTA=WDLCM;     //輸出數據
  36.         s_ms(100);
  37.         PORTC&=~EN;      //EN=0
  38.         s_ms(100);
  39. }

  40. //寫指令
  41. void WriteCommandLCM(unsigned char WCLCM)
  42. {
  43.         //ReadStatusLCM(); //根據需要檢測忙
  44.         s_ms(100);
  45.         PORTC&=~RS;      //RS=0
  46.         s_ms(100);
  47.         PORTC&=~RW;      //RW=0
  48.         s_ms(100);
  49.         PORTC|=EN;       //EN=1
  50.         s_ms(100);
  51.         PORTA=WCLCM;     //輸出指令
  52.         s_ms(100);
  53.         PORTC&=~EN;      //EN=0
  54.         s_ms(100);
  55. }

  56. //讀狀態:檢測忙
  57. void ReadStatusLCM(void)
  58. {
  59.         uchar temp;
  60.     uchar flag = 1;
  61.     while(flag==1)
  62.         {
  63.             DDRA=0x00;      //端口B改為輸入
  64.                 PORTA=0xff;   
  65.                 s_ms(100);
  66.                 PORTC&=~RS;     //RS=0
  67.                 s_ms(100);
  68.                 PORTC|=RW;      //RW=1
  69.                 s_ms(100);
  70.                 PORTC|=EN;      //EN=1
  71.                 s_ms(1000);
  72.                 temp = PINA;    //讀端口B
  73.                 s_ms(1000);
  74.                 DDRA=0xff;      //端口B改為
  75.                 s_ms(100);
  76.                 PORTC&=~EN;     //EN=0
  77.                 s_ms(100);
  78.                 if(temp>>7==0)
  79.                 flag = 0;
  80.         }
  81. }

  82. //LCM初始化
  83. void LCMInit(void)
  84. {
  85.         WriteCommandLCM(0x38);    //三次顯示模式設置,不檢測忙信號
  86.         s_ms(1000);
  87.         WriteCommandLCM(0x38);
  88.         s_ms(1000);
  89.         WriteCommandLCM(0x38);
  90.         s_ms(1000);
  91.         WriteCommandLCM(0x38);    //顯示模式設置,開始要求每次檢測忙信號
  92.         WriteCommandLCM(0x08);    //關閉顯示
  93.         WriteCommandLCM(0x01);    //顯示清屏
  94.         WriteCommandLCM(0x06);    //顯示光標移動設置
  95.         WriteCommandLCM(0x0C);    //顯示開及光標設置
  96. }

  97. //按指定位置顯示一串字符
  98. //液晶顯示:漢字為16*16,字母及數字為8*16,此次顯示的文本
  99. //          從第一行第一列開始,依次向左,如果想在不同的
  100. //          位置顯示,只需修改相應的行值即可。液晶顯示
  101. //          完畢后,轉入語音文本發送。
  102. //DisplsyList(X,DData)函數:X為0x80在第一行顯示;X為0x90在
  103. //                        第二行顯示;X為0x88在第三行顯示;X為0x98在
  104. //                        第四行顯示;DData為顯示數組。
  105. void DisplayList(unsigned char X,char *DData)
  106. {
  107.         unsigned char length;
  108.         unsigned char i=0;
  109.         char *p;
  110.         p = DData;
  111.         length = strlen(p);
  112.         WriteCommandLCM(0x08);
  113.         WriteCommandLCM(X);
  114.         WriteCommandLCM(0x06);
  115.         WriteCommandLCM(0x0C);
  116.         WriteCommandLCM(X);
  117.         for(i=0;i<length;i++)
  118.         {
  119.                 WriteDataLCM(DData[i]);
  120.                 i++;
  121.                 WriteDataLCM(DData[i]);
  122.         }
  123. }

  124. //主函數
  125. void main(void)
  126. {
  127.     //端口初始化
  128.         DDRA=0xff;
  129.         PORTA=0xff;
  130.         DDRC=0xff;
  131.         PORTC=0xff;
  132.         DDRD=0xff;
  133.         PORTD=0x00;
  134.         
  135.         s_ms(200);
  136.         s_ms(200);  
  137.         LCMInit(); //LCM初始化   //液晶初始化

  138.     DisplayList(0x80,text_1);     //顯示第一行
  139.         DisplayList(0x90,text_2);     //顯示第二行
  140.         DisplayList(0x88,text_3);     //顯示第三行
  141.         DisplayList(0x98,text_4);     //顯示第四行
  142.         while(1);
  143. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:541949 發表于 2019-5-19 11:23 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

板凳
ID:478073 發表于 2019-5-19 11:26 | 只看該作者
輸出亂碼多數不是這個問題,多數是在輸英文與數字時間距沒處理好,漢字是16*16,輸英文與數字是8*16,而12864沒有做8*16的函數庫,所以要自己做,網上有別人做好的庫可拿來用。另外仿真與實物也完全不同,仿真有左右屏CS1 & CS2,實物少用。
回復

使用道具 舉報

地板
ID:542087 發表于 2019-5-19 15:09 | 只看該作者
先在網上找找有沒有現成的參考代碼把,從0開始很麻煩,也沒有必要
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品免费视频大全最热 | 国产精品污www一区二区三区 | 日韩一区二区av | 国产精品一区2区 | 超碰8 | 久久久精品一区二区三区四季av | 欧美精品在欧美一区二区少妇 | www.蜜桃av.com| 色本道 | 久久三级影院 | 欧美精品在线一区 | 国产一区 | 亚洲欧洲视频 | 在线视频一区二区三区 | 免费视频一区二区 | 日批的视频 | 久久精品视频在线免费观看 | 99re在线观看| 亚欧精品| 日一区二区 | 天天综合干 | 国产日韩欧美激情 | 色婷婷一区二区三区四区 | 欧美亚洲一级 | 国产中文视频 | 亚洲精品自在在线观看 | 婷婷五月色综合 | 成年人在线观看 | 国产精品一区二区三区久久 | 天天操天天操 | 亚洲高清在线播放 | 中文字幕在线观看精品 | 草草在线观看 | 中文字幕乱码一区二区三区 | 视频三区 | 免费中文字幕 | 欧美成年人视频在线观看 | 国内精品久久久久 | 天天综合网91 | 中文字幕乱码一区二区三区 | 一区二区三区国产好 |