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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

lcd12864程序看不懂

[復制鏈接]
跳轉到指定樓層
樓主
**************************************************************************************************/
這是12864的程序,這個程序比較看不懂,麻煩進行簡單的顯示嘛
原理圖如下:




  1. #include"FYD12864.h"
  2. /*************************************************************************************************/
  3. void Delay_nus(unsigned int nTime)
  4. {
  5. unsigned long j;
  6. while(nTime--)
  7. {
  8.   j=12;
  9.   while(j--);
  10. }
  11. }
  12. /*************************************************************************************************/
  13. void LCD12864_Init(void) //初始化LCD12864
  14. {
  15.     //----------------------------------------------------------------------
  16.     Delay_nus(200);
  17.     SET_LCD12864_CS;
  18.     //----------------------------------------------------------------------
  19.     LCD2864Write_char(0, 0x01);    //清除屏幕顯示,將DDRAM的地址計數器清零
  20.     Delay_nus(200);
  21.     LCD2864Write_char(0, 0x30);    //8BIT控制界面,基本指令集
  22.     Delay_nus(200);
  23.     LCD2864Write_char(0, 0X0C);
  24.     Delay_nus(200);
  25.     LCD2864Write_char(0, 0x01);  // 清除屏幕顯示,將DDRAM的地址計數器清零
  26.     Delay_nus(200);
  27.     LCD2864Write_char(0, 0x06);  // DDRAM的地址計數器(AC)加1
  28.     Delay_nus(200);
  29.     //----------------------------------------------------------------------
  30.     LCD12864_Clear();
  31. }
  32. /*************************************************************************************************/
  33. /*************************************************************************************************/
  34. void Send_byte(unsigned char bbyte) //發送一個字節
  35. {
  36.     unsigned char i;
  37.     for(i = 0; i < 8; i++)
  38.     {
  39.         if((bbyte & 0x80) == 0x80) //取出最高位
  40.         {
  41.             SET_LCD12864_STD;
  42.         }
  43.         else
  44.         {
  45.             CLR_LCD12864_STD;
  46.         }
  47.         SET_LCD12864_SCLK;   
  48.         CLR_LCD12864_SCLK;
  49.         bbyte <<= 1;    //左移
  50.     }
  51. }
  52. void LCD2864Write_char(unsigned char Mode, unsigned char ddata) //寫指令或數據
  53. {
  54.     unsigned char CMD_data, Hdata, Ldata;
  55.     if(Mode == 0X00)
  56.         CMD_data = 0xf8;   //寫指令
  57.     else
  58.         CMD_data = 0xfa;    //寫數據
  59.     Hdata = ddata & 0xf0;    //取高四位
  60.     Ldata = (ddata << 4) & 0xf0;  //取低四位
  61.     Send_byte(CMD_data);    //發送起始信號
  62.     Delay_nus(10);    //延時是必須的
  63.     Send_byte(Hdata);        //發送高四位
  64.     Delay_nus(10);    //延時是必須的
  65.     Send_byte(Ldata);     //發送低四位
  66.     Delay_nus(10);       //延時是必須的
  67. }
  68. /*************************************************************************************************/
  69. /*************************************************************************************************/
  70. void LCD12864_Clear(void)    //清屏函數
  71. {
  72.     // LCD2864Write_char(0,0x01);
  73.     LCD12864_lineclr(1);
  74.     LCD12864_lineclr(2);
  75.     LCD12864_lineclr(3);
  76.     LCD12864_lineclr(4);
  77. }
  78. void LCD12864_dispClear(void)    //清屏函數
  79. {
  80.     // LCD2864Write_char(0,0x01);
  81.     LCD12864_lineclr(2);
  82.     LCD12864_lineclr(3);
  83.     LCD12864_lineclr(4);
  84. }
  85. /*************************************************************************************************/
  86. void LCD12864_RE_0_1(void)       //文字模式,指令集由0變為1
  87. {
  88.     LCD2864Write_char(0, 0x30);
  89.     Delay_nus(50);
  90.     LCD2864Write_char(0, 0x34);
  91.     Delay_nus(50);
  92.     LCD2864Write_char(0, 0x36);
  93.     Delay_nus(50);
  94. }
  95. //此函數如果在文本模式,可以不要,如果同時顯示圖和顯示字就要及時更換指令集,實現具體是什么操作
  96. void LCD12864_RE_1_0(void)     //圖形模式,指令集由1變為0
  97. {
  98.     LCD2864Write_char(0, 0x36);
  99.     Delay_nus(50);
  100.     LCD2864Write_char(0, 0x32);
  101.     Delay_nus(50);
  102. }

  103. /*************************************************************************************************/
  104. void LCD12864_SetAddr(unsigned char VerticalAddr, unsigned char HorizontalAddr) //設定地址
  105. {
  106.     VerticalAddr   &= 0x1F;
  107.     HorizontalAddr &= 0xFF;
  108.     LCD2864Write_char(0,VerticalAddr   | 0x80);
  109.     Delay_nus(100);
  110.     LCD2864Write_char(0,HorizontalAddr | 0x80);
  111.     Delay_nus(100);
  112. }
  113. void LCD12864_Write_String(uint8_t hang, uint8_t lie, char *StringBuf)
  114. {
  115.     uint8_t address, i = 0;
  116.     switch(hang)
  117.     {
  118.   case 1:
  119.    address = 0x80;
  120.    break;
  121.   case 2:
  122.    address = 0x90;
  123.    break;
  124.   case 3:
  125.    address = 0x88;
  126.    break;
  127.   case 4:
  128.    address = 0x98;
  129.    break;
  130.   default:
  131.    address = 0x80;
  132.     }
  133.     LCD2864Write_char(0, address + lie);
  134.     for(i = 0; i < 16; i++)
  135.     {
  136.         LCD2864Write_char(1, *StringBuf);
  137.         StringBuf++;
  138.     }
  139. }
  140. void LCD12864_DispString2(uint8_t hang, uint8_t lie, char *StringBuf, uint8_t LEN)
  141. {
  142.     uint8_t address, i = 0;
  143.     switch(hang)
  144.     {
  145.   case 1:
  146.    address = 0x80;
  147.    break;
  148.   case 2:
  149.    address = 0x90;
  150.    break;
  151.   case 3:
  152.    address = 0x88;
  153.    break;
  154.   case 4:
  155.    address = 0x98;
  156.    break;
  157.   default:
  158.    address = 0x80;
  159.     }
  160.     LCD2864Write_char(0, address + lie);
  161.     for(i = 0; i < LEN; i++)
  162.     {
  163.         LCD2864Write_char(1, *StringBuf);
  164.         StringBuf++;
  165.     }
  166. }
  167. void LCD12864_DispString3(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN)
  168. {
  169.     uint8_t address, i = 0;
  170.     switch(hang)
  171.     {
  172.   case 1:
  173.    address = 0x80;
  174.    break;
  175.   case 2:
  176.    address = 0x90;
  177.    break;
  178.   case 3:
  179.    address = 0x88;
  180.    break;
  181.   case 4:
  182.    address = 0x98;
  183.    break;
  184.   default:
  185.    address = 0x80;
  186.     }
  187.     LCD2864Write_char(0, address + lie);
  188.     for(i = 0; i < LEN; i++)
  189.     {
  190.         LCD2864Write_char(1, *StringBuf);
  191.         StringBuf++;
  192.     }
  193. }
  194. void LCD12864_DispString4(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN)
  195. {
  196.     uint8_t address, i = 0;
  197.     switch(hang)
  198.     {
  199.   case 1:
  200.    address = 0x80;
  201.    break;
  202.   case 2:
  203.    address = 0x90;
  204.    break;
  205.   case 3:
  206.    address = 0x88;
  207.    break;
  208.   case 4:
  209.    address = 0x98;
  210.    break;
  211.   default:
  212.    address = 0x80;
  213.     }
  214.     LCD2864Write_char(0, address + lie);
  215.     for(i = 0; i < LEN; i++)
  216.     {
  217.         LCD2864Write_char(1, *StringBuf);
  218.         StringBuf++;
  219.     }
  220. }

  221. /*********************************************************************************************************
  222. ** 函數名稱: Lcd_lineclr()
  223. ** 功能描述: 清除一行的顯示
  224. ** 輸 入: unsigned char row 要清除顯示的行
  225. ** 輸 出:
  226. ** 全局變量: 無
  227. ** 調用模塊: 無
  228. ** 說明:
  229. ** 注意:
  230. *******************************************************************************************************/
  231. void LCD12864_lineclr(unsigned char row)
  232. {
  233.     unsigned char i;
  234.     switch(row)
  235.     {
  236.   case 1:
  237.   {
  238.    LCD2864Write_char(0, 0x80);
  239.    for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
  240.    break;
  241.   }
  242.   case 2:
  243.   {
  244.    LCD2864Write_char(0, 0x90);
  245.    for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
  246.    break;
  247.   }
  248.   case 3:
  249.   {
  250.    LCD2864Write_char(0, 0x88);
  251.    for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
  252.    break;
  253.   }
  254.   case 4:
  255.   {
  256.    LCD2864Write_char(0, 0x98);
  257.    for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
  258.    break;
  259.   }
  260.   default:
  261.    break;
  262.     }
  263. }

  264. /*************************************************************************************************
  265. **              END FILE
  266. **************************************************************************************************/




  267. **************************************************************************************************/

  268. #ifndef  __FYD12864_H__
  269. #define  __FYD12864_H__
  270. /*************************************************************/
  271. #include<stc15.h>     //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  272. #include<intrins.h>


  273. #define uint8_t unsigned char
  274. #define uint16_t  unsigned int  

  275. /*************************************************************************************************/
  276. #define LCD12864_RS_PIN             P20      //RS
  277. #define LCD12864_RW_PIN             P21   //RW
  278. #define LCD12864_RD_PIN             P22      //RD-EN
  279. /*************************************************************************************************/
  280. //PSB接GND----是串行模式
  281. //PSB接VCC----是并行模式
  282. #define    SET_LCD12864_CS      LCD12864_RS_PIN=1;
  283. #define    CLR_LCD12864_CS       LCD12864_RS_PIN=0;
  284. #define    SET_LCD12864_STD      LCD12864_RW_PIN=1;
  285. #define    CLR_LCD12864_STD      LCD12864_RW_PIN=0;
  286. #define    SET_LCD12864_SCLK     LCD12864_RD_PIN=1;
  287. #define    CLR_LCD12864_SCLK     LCD12864_RD_PIN=0;
  288. /*************************************************************************************************/
  289. //定義7920LCD控制命令    基本命令
  290. #define Lcd_Clear        0x01    //清除顯示
  291. #define Lcd_Adress_Rest     0x02    //地址歸0
  292. #define Lcd_Set_Entrance_Point   0x04  //設定光標移動方向并指定整體顯示是否移動,offset 0x04/0x05/0x06/0x07
  293. #define Lcd_Display_Status    0x08 //顯示狀態(整體顯示,整體不顯示,光標閃爍,光標不閃爍),offset 0x08/0x0C/0x0D/0x0E/0x0F
  294. #define Lcd_Display_Shift    0x10    //光標或顯示移位控制 offset 10H/14H/18H/1CH
  295. #define Lcd_Set_Function_Basic  0x30  //基本指令集
  296. #define Lcd_Set_Function_Extend  0x34  //擴展指令集
  297. #define Lcd_Set_Cgram    0x40 //設定CGRAM 地址 offset 0x00-0x3f
  298. #define Lcd_Set_Ddram    0x80    //設定DDRAM 地址
  299. //定義7920LCD控制命令    擴充命令
  300. #define Lcd_Wait_Mode    0x01    //待命模式 進入待命模式,執行其它命令都可終止待命模式
  301. #define Lcd_Enable_Iram    0x02 //sr=0 允許設定CGRAM 地址(基本指令)
  302. #define Lcd_Enable_Vectical_Roll 0x03 //sr=1 允許輸入卷動地址
  303. #define Lcd_Iram_Address   0x40   //sr=1:offset 0x00~0x3
  304. #define Lcd_Back_White    0x04 //offset 0~3 反白選擇
  305. #define Lcd_Enter_Sleep_Mode  0x08
  306. #define Lcd_Escape_Sleep_Mode  0x0c
  307. #define Lcd_Dram_On     0x36
  308. #define Lcd_Dram_Off    0x34
  309. #define Lcd_Set_Gdram    0x80 //offset 0x00~0x7f

  310. extern  void LCD12864_Init(void); //初始化LCD12864
  311. extern  void LCD2864Write_char(unsigned char Mode, unsigned char ddata); //寫指令或數據
  312. extern  void LCD12864_Clear(void);    //清屏函數
  313. extern  void LCD12864_dispClear(void);   //清屏函數

  314. extern  void LCD12864_RE_0_1(void);      //文字模式,指令集由0變為1
  315. //此函數如果在文本模式,可以不要,如果同時顯示圖和顯示字就要及時更換指令集,實現具體是什么操作
  316. extern  void LCD12864_RE_1_0(void);         //圖形模式,指令集由1變為0
  317. extern  void LCD12864_SetAddr(unsigned char VerticalAddr, unsigned char HorizontalAddr);
  318. extern  void LCD12864_Write_String(uint8_t hang, uint8_t lie, char *StringBuf);
  319. extern  void LCD12864_DispString2(uint8_t hang, uint8_t lie,  char *StringBuf, uint8_t LEN);
  320. extern  void LCD12864_DispString3(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN) ;
  321. extern  void Disp_img(const unsigned char  *img); //圖形方式12864顯示,字模221--橫向取膜
  322. extern  void LCD12864_lineclr(unsigned char row);
  323. extern  void Lcd_linedisp(unsigned char *p, unsigned char row);
  324. extern  void LCDDisp_HEX(uint8_t hang, uint8_t lie, unsigned char  HEX_num[], unsigned char cnt);  //顯示十六進制數
  325. #endif  
  326. /*****************************************************************/
  327. //**          END FILE
  328. /*****************************************************************/
復制代碼



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

使用道具 舉報

沙發
ID:96682 發表于 2017-11-9 03:24 | 只看該作者
此帖僅作者可見

使用道具 舉報

板凳
ID:111634 發表于 2017-11-9 12:38 | 只看該作者
此帖僅作者可見

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线电影网站 | 久久精品—区二区三区 | 亚洲国产精品人人爽夜夜爽 | 成人免费视频网站在线看 | 国产日韩欧美一区二区在线播放 | 91精品国产综合久久久久 | 日日操日日舔 | 伊人二区 | 国产午夜精品久久久久 | 毛片av免费看 | 无人区国产成人久久三区 | 久久毛片| 国产精品久久久久久久久久久久久 | 97视频在线免费 | 国产成人精品一区二区三区四区 | 国产亚洲一区二区在线观看 | 黄片毛片免费观看 | 免费看91 | 精品免费视频 | 中文字幕成人av | av中文在线 | 日韩欧美一区二区三区在线播放 | 成人高清视频在线观看 | 91在线一区二区三区 | av黄色在线 | 免费99精品国产自在在线 | 成人深夜福利网站 | 亚洲电影第1页 | 精品一区二区三区中文字幕 | 成人性生交a做片 | 91av在线免费 | 超碰人人做 | 久久一区二 | 亚洲先锋影音 | 亚洲精品一区在线 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 成人激情视频 | 国产精品视频观看 | 亚洲精品一区二区三区在线 | 欧美性另类 | 97精品久久 |