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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7357|回復: 1
收起左側

LCD12864.h頭文件下載 不帶字庫12864液晶顯示及proteus仿真源程序

[復制鏈接]
ID:306414 發表于 2018-4-12 10:23 | 顯示全部樓層 |閱讀模式
51單片機驅動的不帶字庫的lcd12864液晶屏顯示及其proteus仿真圖如下:
0.jpg

單片機驅動12864液晶的頭文件LCD12864.H源程序如下(附件里面有調用方法 很簡單):
  1. //===========LCD12864.H===============
  2. #ifndef _LCD12864_H__
  3. #define _LCD12864_H__

  4. /*********************************************************************************************/
  5. #include <reg52.h> // 包含頭文件
  6. #include <string.h> //用于指針
  7. typedef         unsigned char uchar ;
  8. typedef  unsigned int  uint ;
  9. /*********************************************************************************************
  10. //接口定義
  11. //
  12. /*********************************************************************************************/
  13. #define LCD12864_DATABUS P1                                         // 定義LCD12864的數據總線
  14. sbit LCD12864_RS = P2^6;                                                 // 定義LCD12864的RS控制線
  15. sbit LCD12864_RW = P2^7;                                                 // 定義LCD12864的RW控制線
  16. sbit LCD12864_E  = P3^0;                                                 // 定義LCD12864的E控制線
  17. sbit LCD12864_CS1 = P3^1;                                         // 定義LCD12864的CS1控制線
  18. sbit LCD12864_CS2 = P3^2;                                         // 定義LCD12864的CS2控制線
  19. //sbit LCD12864_RESET = P2 ^ 5;                                         // 定義LCD12864的RESET控制線
  20. //sbit LCD12864_LEDK = P2 ^ 0;                                         // 定義LCD12864的LEDK(BLK)控制線
  21. /*********************************************************************************************
  22. //數據定義
  23. //定義LCD12864的命令字
  24. /*********************************************************************************************/
  25. #define LCD12864_DISP_ON          0x3F // 打開LCD12864顯示
  26. #define LCD12864_DISP_OFF         0x3E // 關閉LCD12864顯示
  27. #define LCD12864_START_ROW         0xC0 // 顯示起始行,可以用LCD12864_START_ROW+x設置起始行。(x<64)
  28. #define LCD12864_PAGE_ADDR         0xB8 // 頁起始地址,可以用LCD12864_PAGE_ADDR+x設置當前頁。(x<8)
  29. #define LCD12864_COL_ADDR          0x40 // 列起始地址,可以用LCD12864_COL_ADDR+x設置當前列。(x<64)
  30. //在BUSY和REST狀態時,除讀狀態指令外,其他指令均不對LCD12864產生作用。
  31. //在對LCD12864操作之前要查詢BUSY狀態,以確定是否可以對LCD12864進行操作。
  32. #define LCD12864_STATUS_BUSY 0x80                 // LCD12864忙狀態屏蔽碼
  33. #define LCD12864_STATUS_DISP_OFF 0x20   // LCD12864顯示關閉狀態屏蔽碼
  34. #define LCD12864_STATUS_REST 0x10                 // LCD12864復位狀態屏蔽碼

  35. void LCD12864_WriteCMD(uchar LCD_com);
  36. void LCD12864_WriteData(unsigned char LCD12864_data);
  37. void Delay(unsigned int count);




  38. /*********************************************************************************************
  39. //字符/圖像定義庫
  40. /*********************************************************************************************/
  41. /*-- 文字: 歡 --*/
  42. /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
  43. //0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0xaa,0xaa,0x55,0x55,0xaa,0xaa,
  44. //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
  45. //0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x1F,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,
  46. //0x00,0x08,0x08,0x08,0x08,0x08,0x08,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
  47. /* 縱向取模,字節倒序 */
  48. unsigned char code zheng[]={
  49. 0x00,0x80,0xA0,0xA4,0xA8,0xF0,0x54,0x52,0x00,0xF0,0x08,0x68,0x98,0x08,0x00,0x00,
  50. 0x00,0x00,0x10,0x08,0x06,0x01,0x02,0x04,0x00,0x7F,0x00,0x02,0x04,0x07,0x00,0x00,
  51. };
  52. unsigned char code zhou[]={
  53. 0x00,0x00,0xE0,0x00,0xFC,0x00,0xE0,0x00,0xFC,0x20,0xC0,0x00,0xFE,0x00,0x00,0x00,
  54. 0x00,0x21,0x10,0x0C,0x03,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,
  55. };
  56. unsigned char code jin[]={
  57. 0x00,0x80,0x40,0x20,0x90,0x8C,0xC3,0x44,0x48,0x10,0x20,0x60,0x40,0x40,0x40,0x00,
  58. 0x01,0x00,0x20,0x24,0x2A,0x22,0x3F,0x11,0x19,0x15,0x10,0x10,0x00,0x00,0x00,0x00,
  59. };
  60. unsigned char code te[]={
  61. 0x80,0x60,0x58,0x20,0xFE,0xA0,0x40,0x50,0x50,0x7F,0xE8,0xA8,0xA0,0xA0,0x20,0x00,
  62. 0x04,0x04,0x02,0x01,0x3F,0x00,0x01,0x05,0x09,0x21,0x7F,0x00,0x00,0x00,0x00,0x00,
  63. };
  64. unsigned char code lai[]={
  65. 0x00,0x08,0x08,0x48,0xAE,0x24,0xF4,0x14,0x9C,0x57,0x04,0x04,0x04,0x00,0x00,0x00,
  66. 0x00,0x20,0x22,0x12,0x0A,0x05,0x7F,0x03,0x05,0x09,0x19,0x11,0x10,0x10,0x00,0x00,
  67. };
  68. unsigned char code dian[]={
  69. 0x00,0x00,0xF0,0x10,0x90,0x90,0xFF,0x48,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,
  70. 0x00,0x00,0x00,0x03,0x02,0x02,0x1F,0x21,0x21,0x21,0x20,0x20,0x20,0x1C,0x00,0x00,
  71. };
  72. unsigned char code zi[]={
  73. 0x00,0x40,0x40,0x40,0x44,0x44,0x44,0x72,0xCA,0x26,0x22,0x20,0x20,0x20,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  75. };
  76. unsigned char code you[]={
  77. 0x00,0x08,0x08,0x88,0x48,0xF8,0x4C,0x4B,0x28,0x24,0xE4,0x04,0x04,0x04,0x00,0x00,
  78. 0x04,0x02,0x01,0x00,0x00,0x7F,0x05,0x05,0x25,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
  79. };
  80. unsigned char code xian[]={
  81. 0x00,0xF8,0x04,0xB4,0xCC,0x00,0xFC,0xD4,0x54,0x42,0x3E,0x80,0x00,0x00,0x00,0x00,
  82. 0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x10,0x09,0x02,0x05,0x0C,0x08,0x08,0x08,0x00,
  83. };
  84. unsigned char code gong[]={
  85. 0x00,0x00,0x80,0x60,0x18,0x00,0x82,0x02,0x0C,0x10,0x20,0x40,0xC0,0x80,0x80,0x00,
  86. 0x02,0x01,0x00,0x18,0x14,0x12,0x11,0x08,0x0A,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,
  87. };
  88. unsigned char code si[]={
  89. 0x00,0x00,0x80,0xA0,0xA4,0x94,0x54,0xD2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
  90. 0x00,0x00,0x03,0x04,0x04,0x04,0x02,0x03,0x00,0x10,0x20,0x1F,0x00,0x00,0x00,0x00,
  91. };
  92. /********************************************************************************************
  93. //軟件延時 Delay()
  94. *********************************************************************************************/
  95. void Delay(unsigned int count)
  96. {
  97.         unsigned char i;
  98.         while(--count != 0)
  99.            {
  100.                   for(i = 0; i < 125; i++); // ";" 表示空語句,CPU空轉。
  101.            } // i 從0加到125,在12M晶體下CPU大概耗時1毫秒
  102. }
  103. /*********************************************************************************************
  104. //LCD12864測忙函數 LCD12864_TestBusy()
  105. **********************************************************************************************/
  106. //void LCD12864_TestBusy(void)
  107. //{
  108. //        LCD12864_RW = 1;
  109. //        LCD12864_RS = 0;
  110. //        LCD12864_E  = 0;                        //???????????????
  111. //        //Delay(1);
  112. //        LCD12864_E  = 1;
  113. //        while(LCD12864_DATABUS & LCD12864_STATUS_BUSY);
  114. //}
  115. /*********************************************************************************************
  116. //寫指令到LCD12864 LCD12864_WriteCMD()
  117. **********************************************************************************************/
  118. void LCD12864_WriteCMD(uchar LCD_com)
  119. {
  120.         //LCD12864_TestBusy();
  121.         LCD12864_RW = 0;
  122.         LCD12864_RS = 0;
  123.         LCD12864_DATABUS = LCD_com;
  124.         LCD12864_E = 0;                          
  125.         LCD12864_E = 1;
  126.         //Delay(1);
  127.         LCD12864_E = 0;
  128.         //LCD12864_TestBusy();
  129. }
  130. /*********************************************************************************************
  131. //寫數據到LCD12864 LCD12864_WriteData()
  132. **********************************************************************************************/
  133. void LCD12864_WriteData(unsigned char LCD12864_data)
  134. {
  135.         LCD12864_RW = 0;
  136.         LCD12864_RS = 1;
  137.         LCD12864_DATABUS = LCD12864_data;
  138.         LCD12864_E = 0;                                   
  139.         LCD12864_E = 1;
  140.         //Delay(1);
  141.         LCD12864_E = 0;
  142.         //LCD12864_TestBusy();
  143. }
  144. /********************************************************************************************
  145. //從LCD12864讀數據 LCD12864_ReadData()
  146. *********************************************************************************************/
  147. //unsigned char LCD12864_ReadData(void)
  148. //{
  149. //        unsigned char LCD12864_data;
  150. //        LCD12864_E = 0;
  151. //        LCD12864_RW = 1; LCD12864_RS = 1;
  152. //        LCD12864_E = 1;
  153. //        LCD12864_data = LCD12864_DATABUS; //送入8位數據
  154. //        LCD12864_TestBusy(); //讀LCM忙
  155. //        return LCD12864_data;
  156. //}
  157. /********************************************************************************************
  158. //向LCD12864指定點寫一字節數據 LCD12864_Write1Byte_X_Y()
  159. //x(0-127) y(0-63)為坐標值 LCD12864_data 為所要寫的數據
  160. /********************************************************************************************/
  161. //void LCD12864_Write1Byte_X_Y( uchar x,uchar y,uchar LCD12864_data)
  162. //{
  163. //        x = x&0x7f;
  164. //        y = y&0x3f; //參數過濾
  165. //        LCD12864_CS1 = 1;
  166. //        LCD12864_CS2 = 1; //不選中左半屏及右半屏
  167. //        if(x<64)
  168. //          {         
  169. //           LCD12864_CS1 = 0; // 選中左半屏
  170. //          }
  171. //        else
  172. //          {
  173. //                LCD12864_CS2 = 0; // 選中右半屏
  174. //                x = x-64;
  175. //           }
  176. //        LCD12864_WriteCMD(LCD12864_COL_ADDR+x); // 設置當前列地址,即x坐標
  177. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+y); // 設置當前頁地址,即y坐標
  178. //        LCD12864_WriteData(LCD12864_data);       // 向LCD12864寫數據
  179. //}
  180. /********************************************************************************************
  181. //從LCD12864指定點讀取一字數據 LCD12864_Read1Byte_X_Y()
  182. /********************************************************************************************/
  183. //unsigned char LCD12864_Read1Byte_X_Y( uchar x,uchar y)
  184. //{
  185. //        uchar LCD12864_data;
  186. //        x = x&0x7f;
  187. //        y = y&0x3f; //參數過濾
  188. //        LCD12864_CS1 = 1; LCD12864_CS2 = 1; //不選中左半屏及右半屏
  189. //        if(x<64)
  190. //          { // 判斷選擇左、右半屏
  191. //                LCD12864_CS1 = 0; // 選中左半屏
  192. //          }
  193. //        else
  194. //          {
  195. //                LCD12864_CS2 = 0; // 選中右半屏
  196. //                x = x-64;
  197. //          }
  198. //        LCD12864_WriteCMD(LCD12864_COL_ADDR+x); // 設置當前列地址,即x坐標
  199. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+y); // 設置當前頁地址,即y坐標
  200. //        LCD12864_data = LCD12864_ReadData(); // 向LCD12864寫數據
  201. //        return LCD12864_data;
  202. //}
  203. /********************************************************************************************
  204. //向LCD12864填充數據 LCD12864_Fill_Screen()
  205. //設置涮屏速度(為1不涮屏,默認為60)        //欲寫入的數據
  206. *********************************************************************************************/
  207. void LCD12864_Fill_Screen( uchar refresh_rate,uchar LCD_Data)         
  208. {
  209. unsigned char x,y;
  210. LCD12864_CS1 = 0;                                                                       // 選中左半屏
  211. LCD12864_CS2 = 0;                                                                        // 選中右半屏
  212. LCD12864_WriteCMD(LCD12864_START_ROW+0);                       // 顯示起始行設置為0
  213. for(x=0;x<8;x++)
  214.   {
  215.         Delay(refresh_rate);                                                       // 刷屏速度延時
  216.         LCD12864_WriteCMD(LCD12864_PAGE_ADDR+x); // 設置頁地址
  217.         LCD12864_WriteCMD(LCD12864_COL_ADDR);    // 設置列地址
  218.         for(y=0;y<128;y++)                                                   //64
  219.           {LCD12864_WriteData( LCD_Data );}
  220.    }
  221. LCD12864_CS1 = 1;                                                                    // 不選中左半屏
  222. LCD12864_CS2 = 1;                                                                    // 不選中右半屏
  223. }
  224. /********************************************************************************************
  225. //LCD12864清屏 LCD12864_Clear_Screen()
  226. *********************************************************************************************/
  227. void LCD12864_Clear_Screen(void)
  228. {
  229.         LCD12864_Fill_Screen(20,0x00);                                    //寫入0到每個顯示區
  230. }
  231. /********************************************************************************************
  232. //LCD12864黑屏 LCD12864_Clear_black()
  233. *********************************************************************************************/
  234. //void LCD12864_Clear_black(void)
  235. //{
  236. //        LCD12864_Fill_Screen(60,0xff);                                    //可寫入其它數值以填滿LCD屏
  237. //}
  238. /********************************************************************************************
  239. //顯示128*64圖片 LCD12864_Disp_Bitmap_12864()
  240. *********************************************************************************************/
  241. //void LCD12864_Disp_Bitmap_12864( uchar t,uchar code *bitmap_12864)
  242. //{ //128*64點陣圖像所在數組表
  243. //unsigned char j,k;                                          
  244. //for(k=0;k<8;k++)
  245. //  { //設置8頁的顯示
  246. //        Delay(t);
  247. //        LCD12864_CS1 = 0;
  248. //        LCD12864_CS2 = 1; //半屏選中
  249. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+k); //選中頁
  250. //        LCD12864_WriteCMD(LCD12864_COL_ADDR+0); //選中列
  251. //        for(j=0;j<64;j++)                         //64
  252. //          {
  253. //                LCD12864_WriteData(bitmap_12864[k*128+j]); //開始寫入數據
  254. //      }
  255. //        LCD12864_CS1 = 0;
  256. //        LCD12864_CS2 = 0;
  257. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+k);
  258. //        LCD12864_WriteCMD(LCD12864_COL_ADDR+0);
  259. //        for(j=64;j<128;j++)
  260. //           {
  261. //                LCD12864_WriteData(bitmap_12864[k*128+j]);
  262. //       }
  263. //    }
  264. //}
  265. /********************************************************************************************
  266. //在LCD12864的指定點顯示16*16點陣漢字 LCD12864_Disp_Chinese_16_16()
  267. //設置書寫速度(為1直接顯示,默認為12)//輸入8:8*16字符,16:16*16字符
  268. //LCD12864的頁地址(0~7)//LCD12864的列地址(0~128)注意:右半屏起始是64  huan
  269. *********************************************************************************************/
  270. void LCD12864_Disp16(uchar b,uchar LCD12864_page,uchar LCD12864_col,uchar code *Chardata)  
  271. { //16*16點陣漢字字模(縱向取模,字節倒序)
  272.         unsigned char j=0,i=0;
  273.         if(LCD12864_col < 64 )
  274.           {
  275.                 LCD12864_CS1 = 0;
  276.                 LCD12864_CS2 = 1; //判斷屏幕使能
  277.            }
  278.         else
  279.            {
  280.                 LCD12864_CS1 = 1;
  281.                 LCD12864_CS2 = 0;
  282.                 LCD12864_col = LCD12864_col - 64;
  283.            }
  284.         for(j=0;j<2;j++)
  285.           {
  286.                 LCD12864_WriteCMD(LCD12864_PAGE_ADDR+LCD12864_page+j);
  287.                 LCD12864_WriteCMD(LCD12864_COL_ADDR+LCD12864_col);
  288.                 for(i=0;i<b;i++)
  289.                   {
  290.                         LCD12864_WriteData(Chardata[b*j+i]);
  291.                         Delay(10);
  292.                    }
  293.            }
  294. }

  295. /********************************************************************************************
  296. //LCD12864初始化 LCD12864_Init()
  297. //
  298. *********************************************************************************************/
  299. void LCD12864_Init(void)
  300. {
  301.         //LCD12864_RESET = 0; //復位
  302.         //Delay(300);
  303. ……………………

  304. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.jpg 0.jpg

所有資料51hei提供下載:
LCD12864源碼及proteus仿真.rar (88.01 KB, 下載次數: 134)


回復

使用道具 舉報

ID:329346 發表于 2018-5-18 19:39 | 顯示全部樓層
請問一下調用方法在哪呢 樓主
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av一区二区三区 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久久黄色 | 精品国产伦一区二区三区观看方式 | 亚州影院 | av官网在线 | 国产日韩欧美在线播放 | 久久91av | 2019天天操 | 偷拍自拍网站 | 亚洲欧美激情精品一区二区 | 在线播放日韩 | h片在线观看网站 | 不卡一二三区 | 欧美8一10sex性hd | 国产一区在线免费观看 | 天天干天天干 | 亚洲综合在线网 | 国产精品久久久免费 | 欧美激情综合五月色丁香小说 | 国产福利资源在线 | av一区二区三区四区 | 精品视频在线播放 | 成人性生交大片免费看r链接 | 精品国产精品国产偷麻豆 | 欧美女优在线观看 | 欧美一级黄色片免费观看 | 在线伊人网 | 在线欧美视频 | a在线观看 | 在线看国产 | 亚洲一区二区av | 日韩精品一| 中文字幕亚洲精品 | 日韩欧美国产一区二区 | 亚洲a视频 | 日韩中文字幕久久 | 91久久精品视频 | 精品久久久久香蕉网 | 荷兰欧美一级毛片 | 精品毛片视频 |