欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: LCD12864.h頭文件下載 不帶字庫12864液晶顯示及proteus仿真源程序 [打印本頁]

作者: kskdfzksdf    時間: 2018-4-12 10:23
標(biāo)題: LCD12864.h頭文件下載 不帶字庫12864液晶顯示及proteus仿真源程序
51單片機驅(qū)動的不帶字庫的lcd12864液晶屏顯示及其proteus仿真圖如下:


單片機驅(qū)動12864液晶的頭文件LCD12864.H源程序如下(附件里面有調(diào)用方法 很簡單):
  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的數(shù)據(jù)總線
  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. //數(shù)據(jù)定義
  23. //定義LCD12864的命令字
  24. /*********************************************************************************************/
  25. #define LCD12864_DISP_ON          0x3F // 打開LCD12864顯示
  26. #define LCD12864_DISP_OFF         0x3E // 關(guān)閉LCD12864顯示
  27. #define LCD12864_START_ROW         0xC0 // 顯示起始行,可以用LCD12864_START_ROW+x設(shè)置起始行。(x<64)
  28. #define LCD12864_PAGE_ADDR         0xB8 // 頁起始地址,可以用LCD12864_PAGE_ADDR+x設(shè)置當(dāng)前頁。(x<8)
  29. #define LCD12864_COL_ADDR          0x40 // 列起始地址,可以用LCD12864_COL_ADDR+x設(shè)置當(dāng)前列。(x<64)
  30. //在BUSY和REST狀態(tài)時,除讀狀態(tài)指令外,其他指令均不對LCD12864產(chǎn)生作用。
  31. //在對LCD12864操作之前要查詢BUSY狀態(tài),以確定是否可以對LCD12864進行操作。
  32. #define LCD12864_STATUS_BUSY 0x80                 // LCD12864忙狀態(tài)屏蔽碼
  33. #define LCD12864_STATUS_DISP_OFF 0x20   // LCD12864顯示關(guān)閉狀態(tài)屏蔽碼
  34. #define LCD12864_STATUS_REST 0x10                 // LCD12864復(fù)位狀態(tài)屏蔽碼

  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; 此字體下對應(yīng)的點陣為:寬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. /* 縱向取模,字節(jié)倒序 */
  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空轉(zhuǎn)。
  101.            } // i 從0加到125,在12M晶體下CPU大概耗時1毫秒
  102. }
  103. /*********************************************************************************************
  104. //LCD12864測忙函數(shù) 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. //寫數(shù)據(jù)到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讀數(shù)據(jù) 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位數(shù)據(jù)
  154. //        LCD12864_TestBusy(); //讀LCM忙
  155. //        return LCD12864_data;
  156. //}
  157. /********************************************************************************************
  158. //向LCD12864指定點寫一字節(jié)數(shù)據(jù) LCD12864_Write1Byte_X_Y()
  159. //x(0-127) y(0-63)為坐標(biāo)值 LCD12864_data 為所要寫的數(shù)據(jù)
  160. /********************************************************************************************/
  161. //void LCD12864_Write1Byte_X_Y( uchar x,uchar y,uchar LCD12864_data)
  162. //{
  163. //        x = x&0x7f;
  164. //        y = y&0x3f; //參數(shù)過濾
  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); // 設(shè)置當(dāng)前列地址,即x坐標(biāo)
  177. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+y); // 設(shè)置當(dāng)前頁地址,即y坐標(biāo)
  178. //        LCD12864_WriteData(LCD12864_data);       // 向LCD12864寫數(shù)據(jù)
  179. //}
  180. /********************************************************************************************
  181. //從LCD12864指定點讀取一字?jǐn)?shù)據(jù) 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; //參數(shù)過濾
  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); // 設(shè)置當(dāng)前列地址,即x坐標(biāo)
  199. //        LCD12864_WriteCMD(LCD12864_PAGE_ADDR+y); // 設(shè)置當(dāng)前頁地址,即y坐標(biāo)
  200. //        LCD12864_data = LCD12864_ReadData(); // 向LCD12864寫數(shù)據(jù)
  201. //        return LCD12864_data;
  202. //}
  203. /********************************************************************************************
  204. //向LCD12864填充數(shù)據(jù) LCD12864_Fill_Screen()
  205. //設(shè)置涮屏速度(為1不涮屏,默認(rèn)為60)        //欲寫入的數(shù)據(jù)
  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);                       // 顯示起始行設(shè)置為0
  213. for(x=0;x<8;x++)
  214.   {
  215.         Delay(refresh_rate);                                                       // 刷屏速度延時
  216.         LCD12864_WriteCMD(LCD12864_PAGE_ADDR+x); // 設(shè)置頁地址
  217.         LCD12864_WriteCMD(LCD12864_COL_ADDR);    // 設(shè)置列地址
  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到每個顯示區(qū)
  230. }
  231. /********************************************************************************************
  232. //LCD12864黑屏 LCD12864_Clear_black()
  233. *********************************************************************************************/
  234. //void LCD12864_Clear_black(void)
  235. //{
  236. //        LCD12864_Fill_Screen(60,0xff);                                    //可寫入其它數(shù)值以填滿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點陣圖像所在數(shù)組表
  243. //unsigned char j,k;                                          
  244. //for(k=0;k<8;k++)
  245. //  { //設(shè)置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]); //開始寫入數(shù)據(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. //設(shè)置書寫速度(為1直接顯示,默認(rèn)為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點陣漢字字模(縱向取模,字節(jié)倒序)
  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; //復(fù)位
  302.         //Delay(300);
  303. ……………………

  304. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


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



作者: ping116    時間: 2018-5-18 19:39
請問一下調(diào)用方法在哪呢 樓主




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1