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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PIC18F25K80+LCD1602程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:139397 發表于 2016-9-14 13:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
lcd1602.c和lcd1602.h文件加入工程即可。
PIC18F25K80 開發環境MPLAB X IDE v3.35,PIC的芯片都可以,需要適當修改void LCD_DelayMs(uint16_t Ms)函數。
PIC18F25K80_LCD1602.X.rar (1.63 KB, 下載次數: 34)

  1. /*
  2. * File:   lcd1602.c
  3. * Author: BG8LY
  4. *
  5. * Created on 2016年9月13日, 下午12:16
  6. */

  7. #include <xc.h>
  8. #include <stdint.h>
  9. #include "lcd1602.h"

  10. //LCD ms毫秒延時函數
  11. void LCD_DelayMs(uint16_t Ms)
  12. {
  13.         uint16_t x,y;
  14.         for(x=Ms; x>0; x--)
  15.     {
  16.         for(y=250; y>0; y--);
  17.     }
  18. }

  19. //忙檢測
  20. void LCD_Read_Busy(void)
  21. {
  22.         LCD_BUSY_TRIS = 1;        // 置忙檢測端口設置為輸入
  23.         do
  24.         {
  25.                 LCD_E = 0;
  26.                 LCD_RS = 0;
  27.                 LCD_RW = 1;
  28.                 Nop();
  29.                 LCD_E = 1;
  30.                 Nop();
  31.         Nop();
  32.         }while(LCD_BUSY);
  33.         LCD_BUSY_TRIS = 0;        // 恢復忙檢測位端口為輸出
  34. }

  35. //寫指令,busyDect=0時不需要忙檢測
  36. void LCD_Write_Reg(uint8_t Cmd, uint8_t BusyDect)
  37. {
  38.         if(BusyDect==1)
  39.     {
  40.                 LCD_Read_Busy();
  41.     }
  42.         LCD_E = 0;
  43.         LCD_RS = 0;
  44.         LCD_RW = 0;
  45.         DATA_PORT = Cmd;
  46.         Nop();
  47.         LCD_E = 1;
  48.         Nop();
  49.     Nop();
  50.         LCD_E = 0;
  51. }

  52. //寫字節數據,寫數據總需要忙檢測
  53. void LCD_Write_Data(uint8_t Data)
  54. {
  55.         LCD_Read_Busy();
  56.         LCD_E = 0;
  57.         LCD_RS = 1;
  58.         LCD_RW = 0;
  59.         DATA_PORT = Data;
  60.     Nop();
  61.         LCD_E = 1;
  62.         Nop();
  63.     Nop();
  64.         LCD_E = 0;
  65. }

  66. //寫數據到(x,y)
  67. void LCD_Display_Char(uint8_t x, uint8_t y, uint8_t Data)
  68. {
  69.         x &= 0x0F;        // 限制列數不大于16個字符
  70.         y &= 0x01;        // 限制行數不大于2行
  71.     if(y == 0x01)
  72.     {
  73.         x |= 0x40;
  74.     }
  75.     x | = 0x80;
  76.    
  77.         LCD_Write_Reg(x, 1);
  78.    
  79.         LCD_Write_Data(Data);
  80. }

  81. //從(x,y)開始寫字符串
  82. void LCD_Display_String(uint8_t x, uint8_t y, char *str)
  83. {
  84.         x &= 0x0F;        // 限制列數不大于16個字符
  85.         y &= 0x01;        // 限制行數不大于2行
  86.     if(y == 0x01)
  87.     {
  88.         x |= 0x40;
  89.     }
  90.     x | = 0x80;
  91.    
  92.         LCD_Write_Reg(x, 1);
  93.    
  94.     while(*str != '\0')
  95.         {
  96.                 LCD_Write_Data(*str++);       
  97.         }       
  98. }

  99. //LCD清屏
  100. void LCD_Clear(void)
  101. {
  102.     LCD_Write_Reg(0x01,1);                // 清屏
  103.     LCD_Read_Busy();
  104. }

  105. //LCD初始化
  106. void LCD_Init(void)
  107. {
  108.         // LCD 控制端口初始化
  109.     LCD_RS_TRIS = 0;        // 數據命令選擇端口方向->輸出
  110.     LCD_RW_TRIS = 0;        // 讀寫選擇端口方向->輸出
  111.     LCD_E_TRIS = 0;         // 使能信號端口方向->輸出
  112.     DATA_PORT_TRIS = 0x00;  // 數據端口方向->輸出
  113.    
  114.     // LCD 功能寄存器初始化
  115.     LCD_DelayMs(5);
  116.         LCD_Write_Reg(0x38,0);
  117.         LCD_DelayMs(5);
  118.         LCD_Write_Reg(0x38,0);
  119.         LCD_DelayMs(5);
  120.         LCD_Write_Reg(0x38,0);                // 三次寫入0x38,初始化1602,前三次不用忙檢測,以后需要
  121.         LCD_Write_Reg(0x38,1);                // 設置5*7的1602模式       
  122.         LCD_Write_Reg(0x08,1);                // 關閉顯示
  123.         LCD_Write_Reg(0x01,1);                // 清屏
  124.         LCD_Write_Reg(0x06,1);                // 顯示光標移動設置:讀寫一字指針+1,屏幕不動
  125.         LCD_Write_Reg(0x0C,1);                // 開顯示,不顯示光標,光標不閃爍
  126. }
復制代碼




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:226856 發表于 2017-8-11 09:32 | 只看該作者
謝謝教學
正在學習中
回復

使用道具 舉報

板凳
ID:226856 發表于 2017-8-11 14:08 | 只看該作者
想請教大大
如果顯示器有偏光板正/負模式可選用
想用負模式 指令如何改呢?
回復

使用道具 舉報

地板
ID:286059 發表于 2020-1-14 21:00 | 只看該作者
非常好,解決我的大問題,非常感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品一区二区 | 九九九视频精品 | 久久免费视频1 | 精品久久久久久久久久 | 毛片免费观看视频 | 91免费在线| 国产视频精品区 | 久久精品一区 | 成人午夜影院 | 91资源在线 | 中文字幕欧美日韩一区 | 成人免费视频网站在线看 | 91精品久久久久久久久 | 国产不卡视频在线 | 精品免费国产视频 | 999国产视频| 午夜ww| 欧美激情视频网站 | 四虎成人免费视频 | 蜜桃色网| 狠狠操狠狠操 | 国产激情一区二区三区 | 国产成人精品999在线观看 | 日韩福利在线观看 | 青青草一区 | 亚洲免费视频一区二区 | 一区中文字幕 | 天天草天天射 | 国产一区二区三区在线 | 国外成人在线视频网站 | 欧美日韩国产高清视频 | 可以看黄的视频 | 一级特黄a大片 | 中文字幕高清av | 韩日精品一区 | 久久成人国产精品 | 国产午夜精品久久久久免费视高清 | 久久免费福利 | 国产成人精品一区二区三区在线 | 欧洲视频一区二区 | 国产9 9在线 | 中文 |