找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 14582|回復(fù): 22
打印 上一主題 下一主題
收起左側(cè)

無(wú)字庫(kù)的12864顯示漢字,字母,數(shù)字的51單片機(jī)C程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:77400 發(fā)表于 2015-4-18 23:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
無(wú)字12864顯示漢字,字母,數(shù)字的51單片機(jī)C程序

12864自己編程.zip

44.31 KB, 下載次數(shù): 303, 下載積分: 黑幣 -5

12864

評(píng)分

參與人數(shù) 2黑幣 +54 收起 理由
zhaok2013 + 4 贊一個(gè)!
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2015-4-18 23:53 | 只看該作者
這是樓主壓縮包里面的st7565.c 驅(qū)動(dòng)程序:
  1. #include"st7565.h"

  2. /*******************************************************************************
  3. * 函 數(shù) 名         : LCD12864_WriteCmd
  4. * 函數(shù)功能                   : 寫(xiě)入一個(gè)命令到12864
  5. * 輸    入         : cmd
  6. * 輸    出         : 無(wú)
  7. *******************************************************************************/

  8. void LcdSt7565_WriteCmd(cmd)
  9. {
  10.         LCD12864_CS = 0;           //chip select,打開(kāi)片選
  11.         LCD12864_RD = 1;           //disable read,讀失能       
  12.         LCD12864_RS = 0;       //select command,選擇命令
  13.         LCD12864_RW = 0;       //select write,選擇寫(xiě)模式
  14.         _nop_();
  15.         _nop_();

  16.         DATA_PORT = cmd; //put command,放置命令
  17.         _nop_();
  18.         _nop_();

  19.         LCD12864_RW = 1;           //command writing ,寫(xiě)入命令
  20. }

  21. /*******************************************************************************
  22. * 函 數(shù) 名         : LcdSt7565_WriteData
  23. * 函數(shù)功能                   : 寫(xiě)入一個(gè)數(shù)據(jù)到12864
  24. * 輸    入         : dat
  25. * 輸    出         : 無(wú)
  26. *******************************************************************************/

  27. void LcdSt7565_WriteData(dat)
  28. {       
  29.         LCD12864_CS = 0;           //chip select,打開(kāi)片選
  30.         LCD12864_RD = 1;           //disable read,讀失能       
  31.         LCD12864_RS = 1;       //select data,選擇數(shù)據(jù)
  32.         LCD12864_RW = 0;       //select write,選擇寫(xiě)模式
  33.         _nop_();
  34.         _nop_();

  35.         DATA_PORT = dat;       //put data,放置數(shù)據(jù)
  36.         _nop_();
  37.         _nop_();

  38.         LCD12864_RW = 1;           //data writing,寫(xiě)數(shù)據(jù)
  39. }
  40. /*******************************************************************************
  41. * 函 數(shù) 名         : LCD12864_Init
  42. * 函數(shù)功能                   : 初始化12864
  43. * 輸    入         : 無(wú)
  44. * 輸    出         : 無(wú)
  45. * 說(shuō)    明         : LCD12864的命令指令可以查看例程文件夾下的《ST7565p數(shù)據(jù)手冊(cè)》
  46. *                  * 的第51頁(yè)的位置。
  47. *******************************************************************************/

  48. void Lcd12864_Init()
  49. {
  50.         uchar i;
  51.         LCD12864_RSET = 0;
  52.         for (i=0; i<100; i++);
  53.         LCD12864_CS = 0;
  54.         LCD12864_RSET = 1;
  55.        
  56.         //----------------Star Initial Sequence-------//
  57.         //------程序初始化設(shè)置,具體命令可以看文件夾下---//

  58.         //--軟件初始化--//
  59.         LcdSt7565_WriteCmd(0xE2);  //reset
  60.         for (i=0; i<100; i++);           //延時(shí)一下

  61.         //--表格第8個(gè)命令,0xA0段(左右)方向選擇正常方向(0xA1為反方向)--//
  62.         LcdSt7565_WriteCmd(0xA1);  //ADC select segment direction
  63.        
  64.         //--表格第15個(gè)命令,0xC8普通(上下)方向選擇選擇反向,0xC0為正常方向--//
  65.         LcdSt7565_WriteCmd(0xC8);  //Common direction
  66.                          
  67.         //--表格第9個(gè)命令,0xA6為設(shè)置字體為黑色,背景為白色---//
  68.         //--0xA7為設(shè)置字體為白色,背景為黑色---//
  69.         LcdSt7565_WriteCmd(0xA6);  //reverse display

  70.         //--表格第10個(gè)命令,0xA4像素正常顯示,0xA5像素全開(kāi)--//
  71.         LcdSt7565_WriteCmd(0xA4);  //normal display
  72.        
  73.         //--表格第11個(gè)命令,0xA3偏壓為1/7,0xA2偏壓為1/9--//
  74.         LcdSt7565_WriteCmd(0xA2);  //bias set 1/9
  75.        
  76.         //--表格第19個(gè)命令,這個(gè)是個(gè)雙字節(jié)的命令,0xF800選擇增壓為4X;--//
  77.         //--0xF801,選擇增壓為5X,其實(shí)效果差不多--//       
  78.         LcdSt7565_WriteCmd(0xF8);  //Boost ratio set
  79.         LcdSt7565_WriteCmd(0x01);  //x4
  80.        
  81.         //--表格第18個(gè)命令,這個(gè)是個(gè)雙字節(jié)命令,高字節(jié)為0X81,低字節(jié)可以--//
  82.         //--選擇從0x00到0X3F。用來(lái)設(shè)置背景光對(duì)比度。---/
  83.         LcdSt7565_WriteCmd(0x81);  //V0 a set
  84.         LcdSt7565_WriteCmd(0x23);

  85.         //--表格第17個(gè)命令,選擇調(diào)節(jié)電阻率--//
  86.         LcdSt7565_WriteCmd(0x25);  //Ra/Rb set
  87.        
  88.         //--表格第16個(gè)命令,電源設(shè)置。--//
  89.         LcdSt7565_WriteCmd(0x2F);
  90.         for (i=0; i<100; i++);

  91.         //--表格第2個(gè)命令,設(shè)置顯示開(kāi)始位置--//
  92.         LcdSt7565_WriteCmd(0x40);  //start line

  93.         //--表格第1個(gè)命令,開(kāi)啟顯示--//
  94.         LcdSt7565_WriteCmd(0xAF);  // display on
  95.         for (i=0; i<100; i++);

  96. }

  97. /*******************************************************************************
  98. * 函 數(shù) 名         : LCD12864_ClearScreen
  99. * 函數(shù)功能                   : 清屏12864
  100. * 輸    入         : 無(wú)
  101. * 輸    出         : 無(wú)
  102. *******************************************************************************/

  103. void Lcd12864_ClearScreen(void)
  104. {
  105.         uchar i, j;

  106.         for(i=0; i<8; i++)
  107.         {
  108.                 //--表格第3個(gè)命令,設(shè)置Y的坐標(biāo)--//
  109.                 //--Y軸有64個(gè),一個(gè)坐標(biāo)8位,也就是有8個(gè)坐標(biāo)--//
  110.                 //所以一般我們使用的也就是從0xB0到0x07,就夠了--//       
  111.                 LcdSt7565_WriteCmd(0xB0+i);

  112.                 //--表格第4個(gè)命令,設(shè)置X坐標(biāo)--//
  113.                 //--當(dāng)你的段初始化為0xA1時(shí),X坐標(biāo)從0x10,0x04到0x18,0x04,一共128位--//
  114.                 //--當(dāng)你的段初始化為0xA0時(shí),X坐標(biāo)從0x10,0x00到0x18,0x00,一共128位--//
  115.                 //--在寫(xiě)入數(shù)據(jù)之后X坐標(biāo)的坐標(biāo)是會(huì)自動(dòng)加1的,我們初始化使用0xA0所以--//
  116.                 //--我們的X坐標(biāo)從0x10,0x00開(kāi)始---//
  117.                 LcdSt7565_WriteCmd(0x10);
  118.                 LcdSt7565_WriteCmd(0x04);                                                          
  119.                
  120.                 //--X軸有128位,就一共刷128次,X坐標(biāo)會(huì)自動(dòng)加1,所以我們不用再設(shè)置坐標(biāo)--//
  121.                 for(j=0; j<128; j++)
  122.                 {
  123.                         LcdSt7565_WriteData(0x00);  //如果設(shè)置背景為白色時(shí),清屏選擇0XFF
  124.                 }
  125.         }
  126. }

  127. /*******************************************************************************
  128. * 函 數(shù) 名         : LCD12864_Write16CnCHAR
  129. * 函數(shù)功能                   : 在12864上面書(shū)寫(xiě)16X16的漢字
  130. * 輸    入         : x, y, cn
  131. * 輸    出         : 無(wú)
  132. * 說(shuō)    明                   : 該函數(shù)可以直接書(shū)寫(xiě)字符串,但是書(shū)寫(xiě)是從右到左,所以輸入的時(shí)
  133. *                  * 侯注意輸入。漢字的取模方式請(qǐng)觀看文件夾下的《漢字取模軟件的
  134. *                  * 使用說(shuō)明》
  135. *******************************************************************************/

  136. #ifdef  CHAR_CODE

  137. #include"charcode.h"

  138. uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)
  139. {
  140.         uchar j, x1, x2, wordNum;

  141.         //--Y的坐標(biāo)只能從0到7,大于則直接返回--//
  142.         if(y > 7)
  143.         {
  144.                 return 0;
  145.         }

  146.         //--X的坐標(biāo)只能從0到128,大于則直接返回--//
  147.         if(x > 128)
  148.         {
  149.                 return 0;
  150.         }
  151.         y += 0xB0;           //求取Y坐標(biāo)的值
  152.         //--設(shè)置Y坐標(biāo)--//
  153.         LcdSt7565_WriteCmd(y);
  154.         while ( *cn != '\0')         //在C語(yǔ)言中字符串結(jié)束以‘\0’結(jié)尾
  155.         {       
  156.        
  157.                 //--設(shè)置Y坐標(biāo)--//
  158.                 LcdSt7565_WriteCmd(y);

  159.                 x1 = (x >> 4) & 0x0F;   //由于X坐標(biāo)要兩句命令,分高低4位,所以這里先取出高4位
  160.                 x2 = x & 0x0F;          //去低四位
  161.                 //--設(shè)置X坐標(biāo)--//
  162.                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  163.                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位

  164.                 for (wordNum=0; wordNum<50; wordNum++)
  165.                 {
  166.                     //--查詢要寫(xiě)的字在字庫(kù)中的位置--//
  167.                         if ((CN16CHAR[wordNum].Index[0] == *cn)
  168.                              &&(CN16CHAR[wordNum].Index[1] == *(cn+1)))
  169.                         {
  170.                                 for (j=0; j<32; j++) //寫(xiě)一個(gè)字
  171.                                 {               
  172.                                         if (j == 16)         //由于16X16用到兩個(gè)Y坐標(biāo),當(dāng)大于等于16時(shí),切換坐標(biāo)
  173.                                         {
  174.                                                 //--設(shè)置Y坐標(biāo)--//
  175.                                                    LcdSt7565_WriteCmd(y + 1);
  176.                        
  177.                                                 //--設(shè)置X坐標(biāo)--//
  178.                                                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  179.                                                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位
  180.                                         }
  181.                                         LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);
  182.                                 }
  183.                                 x += 16;
  184.                         }//if查到字結(jié)束               
  185.                 } //for查字結(jié)束       
  186.                 cn += 2;
  187.         }        //while結(jié)束
  188.         return 1;
  189. }





  190. uchar Lcd12864_Write8CnCHAR(uchar x, uchar y, uchar *cn)
  191. {
  192.         uchar j, x1, x2, wordNum;

  193.         //--Y的坐標(biāo)只能從0到7,大于則直接返回--//
  194.         if(y > 7)
  195.         {
  196.                 return 0;
  197.         }

  198.         //--X的坐標(biāo)只能從0到128,大于則直接返回--//
  199.         if(x > 128)
  200.         {
  201.                 return 0;
  202.         }
  203.         y += 0xB0;           //求取Y坐標(biāo)的值
  204.         //--設(shè)置Y坐標(biāo)--//
  205.         LcdSt7565_WriteCmd(y);
  206.         while ( *cn != '\0')         //在C語(yǔ)言中字符串結(jié)束以‘\0’結(jié)尾
  207.         {       
  208.        
  209.                 //--設(shè)置Y坐標(biāo)--//
  210.                 LcdSt7565_WriteCmd(y);

  211.                 x1 = x/10;   //由于X坐標(biāo)要兩句命令,分高低4位,所以這里先取出高4位
  212.                 x2 = x%10;          //去低四位
  213.                 //--設(shè)置X坐標(biāo)--//
  214.                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  215.                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位

  216.                 for (wordNum=0; wordNum<50; wordNum++)
  217.                 {
  218.                     //--查詢要寫(xiě)的字在字庫(kù)中的位置--//
  219.                         if ((CN8CHAR[wordNum].Index == *cn))
  220.                         {
  221.                                 for (j=0; j<16; j++) //寫(xiě)一個(gè)字
  222.                                 {               
  223.                                         if (j == 8)         //由于16X16用到兩個(gè)Y坐標(biāo),當(dāng)大于等于16時(shí),切換坐標(biāo)
  224.                                         {
  225.                                                 //--設(shè)置Y坐標(biāo)--//
  226.                                                    LcdSt7565_WriteCmd(y + 1);
  227.                                                 //--設(shè)置X坐標(biāo)--//
  228.                                                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  229.                                                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位
  230.                                         }
  231.                                         LcdSt7565_WriteData(CN8CHAR[wordNum].Msk[j]);
  232.                                 }
  233.                                 x += 8;
  234.                         }//if查到字結(jié)束               
  235.                 } //for查字結(jié)束       
  236.                 cn += 1;
  237.         }        //while結(jié)束
  238.         return 1;
  239. }



  240. #endif

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:74712 發(fā)表于 2015-5-4 16:36 | 只看該作者
沒(méi)有pcb圖,電路 圖也不是很完整
回復(fù)

使用道具 舉報(bào)

地板
ID:45963 發(fā)表于 2015-6-7 17:22 | 只看該作者
黑幣不足啊
回復(fù)

使用道具 舉報(bào)

5#
ID:88239 發(fā)表于 2015-8-13 07:42 | 只看該作者
黑幣不足啊,,,,,,評(píng)個(gè)論給一黑幣不???
回復(fù)

使用道具 舉報(bào)

6#
ID:84495 發(fā)表于 2015-8-14 09:25 | 只看該作者
zhu注解非常詳細(xì),一直改字模套用別人程序,不太會(huì)算地址,,哈哈
回復(fù)

使用道具 舉報(bào)

7#
ID:72919 發(fā)表于 2015-8-23 23:08 | 只看該作者
路過(guò)看看  很好
回復(fù)

使用道具 舉報(bào)

8#
ID:88875 發(fā)表于 2015-8-30 19:43 | 只看該作者
求教一下,有沒(méi)有讀屏幕數(shù)據(jù)的函數(shù)?或者如何任意畫(huà)點(diǎn)?
回復(fù)

使用道具 舉報(bào)

9#
ID:91433 發(fā)表于 2015-10-1 11:18 | 只看該作者
好帖子,就是黑幣不夠不能下載。
回復(fù)

使用道具 舉報(bào)

10#
ID:109016 發(fā)表于 2016-6-20 16:32 | 只看該作者

好帖子,就是黑幣不夠不能下載。
回復(fù)

使用道具 舉報(bào)

11#
ID:135059 發(fā)表于 2016-7-26 11:12 | 只看該作者
說(shuō)的顯示數(shù)字呢?
回復(fù)

使用道具 舉報(bào)

12#
ID:61390 發(fā)表于 2016-9-2 23:11 來(lái)自手機(jī) | 只看該作者
ding!!!!good idea
回復(fù)

使用道具 舉報(bào)

13#
ID:150501 發(fā)表于 2016-11-27 12:46 | 只看該作者
這個(gè)程序有點(diǎn)問(wèn)題,x1和x2算法不對(duì),會(huì)造成兩個(gè)數(shù)字之間有空格,
x1 = x/10;   //由于X坐標(biāo)要兩句命令,分高低4位,所以這里先取出高4位
x2 = x%10;          //去低四位

應(yīng)該改成
x1 = (x >> 4) & 0x0F;
x2 = x & 0x0F;
回復(fù)

使用道具 舉報(bào)

14#
ID:57429 發(fā)表于 2017-3-5 20:47 | 只看該作者
和我用的屏是一樣的            
回復(fù)

使用道具 舉報(bào)

15#
ID:183535 發(fā)表于 2017-3-26 16:31 | 只看該作者
我乃一代人才 發(fā)表于 2016-11-27 12:46
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

果然是這樣。
顯示數(shù)字0亂碼怎么辦??
回復(fù)

使用道具 舉報(bào)

16#
ID:187029 發(fā)表于 2017-4-7 10:32 | 只看該作者
不錯(cuò),正在學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

17#
ID:202591 發(fā)表于 2017-5-22 15:08 | 只看該作者
到底好不好用呀,很猶豫
回復(fù)

使用道具 舉報(bào)

18#
ID:219078 發(fā)表于 2017-7-12 11:20 | 只看該作者
贊一個(gè),不錯(cuò)的資料
回復(fù)

使用道具 舉報(bào)

19#
ID:159675 發(fā)表于 2018-8-15 12:09 | 只看該作者
真是太感謝了,我正需要
回復(fù)

使用道具 舉報(bào)

20#
ID:73182 發(fā)表于 2018-8-15 15:34 | 只看該作者
普中的代碼
回復(fù)

使用道具 舉報(bào)

21#
ID:333678 發(fā)表于 2018-10-20 05:42 | 只看該作者
想學(xué)習(xí)一下,黑幣不足,不能下載。
回復(fù)

使用道具 舉報(bào)

22#
ID:339596 發(fā)表于 2018-11-25 21:41 | 只看該作者
好東西下載看看
回復(fù)

使用道具 舉報(bào)

23#
ID:433219 發(fā)表于 2018-11-26 10:01 | 只看該作者
無(wú)字庫(kù)的,ks0107、08的居多,也便宜啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表