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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

74HC595+單片機3個IO口驅動LCD1602 利用位尋址變量 Proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:137736 發表于 2022-11-27 16:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
完全使用3個IO口驅動LCD1602
8051三線傳送數據到74HC595,驅動LCD1602.利用位變量可位操作,程序更加簡單。根據網上別人的程序改編而來。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


/*hc595->1602管腳連接bin(D7,D6,D5,D4,0,E,RW,RS)*/
#include <reg52.h>
//8051->hc595引腳定義
sbit LCD1602_SHCP=P3^6;        //in clock
sbit LCD1602_DS=P3^4;         //in data
sbit LCD1602_STCP=P3^5;          //out clock

//兩種數據類型
typedef unsigned char uchar;
typedef unsigned int uint;

//定義數據槽
//uchar RS,RW,E,D4,D5,D6,D7;
bdata uchar sendData;
sbit RS = sendData^0;
sbit RW = sendData^1;
sbit E = sendData^2;

單片機源程序如下:
  1. #include <reg52.h>
  2. #include "lcd595.h"

  3. const uchar type_t[]={
  4.   0x1f,0x02,0x02,0x02,
  5.         0x02,0x02,0x02,0x00
  6. };

  7. const uchar line1[]="Have a nice day!";
  8. const uchar line2[]="HE Wcommands";

  9. void main()
  10. {
  11.         uchar i;
  12.         LcdInit();
  13.         LcdWriteCGRAM(0x00,type_t);
  14.         LcdWriteData(0x00);
  15.         LcdWriteCom(0x81);
  16.         LcdPrintf("HE With");
  17.         LcdWriteCom(0xc0);
  18.         LcdPrintf("Commands");
  19.         Lcd1602_Delay1ms(1000);
  20.         LcdWriteCom(0x01);
  21.         while(1){
  22.                 for(i=0;i<16;i++){
  23.                         LcdWriteCom(0x80+i);
  24.                         LcdWriteData(line1[i]);
  25.                         Lcd1602_Delay1ms(100);
  26.                 }
  27.                 Lcd1602_Delay1ms(500);
  28.                 LcdWriteCom(0xc1);
  29.                 LcdWriteData(0x00);
  30.                 Lcd1602_Delay1ms(100);
  31.                 for(i=0;i<12;i++){
  32.                         LcdWriteCom(0xc2+i);
  33.                         LcdWriteData(line2[i]);
  34.                         Lcd1602_Delay1ms(100);
  35.                 }
  36.                 LcdWriteCom(0x01);
  37.                 Lcd1602_Delay1ms(100);
  38.         }
  39. }
復制代碼
  1. /*hc595->1602管腳連接bin(D7,D6,D5,D4,0,E,RW,RS)*/
  2. #include <reg52.h>
  3. //8051->hc595引腳定義
  4. sbit LCD1602_SHCP=P3^6;        //in clock
  5. sbit LCD1602_DS=P3^4;         //in data
  6. sbit LCD1602_STCP=P3^5;          //out clock

  7. //兩種數據類型
  8. typedef unsigned char uchar;
  9. typedef unsigned int uint;

  10. //定義數據槽
  11. //uchar RS,RW,E,D4,D5,D6,D7;
  12. bdata uchar sendData;
  13. sbit RS = sendData^0;
  14. sbit RW = sendData^1;
  15. sbit E = sendData^2;
  16. sbit D4 = sendData^3;
  17. sbit D5 = sendData^4;
  18. sbit D6 = sendData^5;
  19. sbit D7 = sendData^6;

  20. void Lcd1602_Delay1ms(uint c); //延時函數,延時1ms
  21. void LCD1602_DATAPINS(uchar value); //更改74HC595連接LCD1602的數據
  22. void LcdCalc(uchar i); //確定4位總線
  23. void LcdWriteCom(uchar com); //向LCD寫入一個字節的命令
  24. void LcdWriteData(uchar dat); //向LCD寫入一個字節的數據
  25. void LcdInit(); //初始化LCD屏
  26. void LcdPrintf(uchar *s); //向屏幕輸出字符
  27. void LcdWriteCGRAM(uchar index,uchar *p); //建立一個自定義字符
  28. void LCDPrintNum(uint num,uchar wei); //顯示數字

  29. /*******************************************************************************
  30. * 函 數 名         : Lcd1602_Delay1ms
  31. * 函數功能                   : 延時函數,延時1ms
  32. * 輸    入         : c
  33. * 輸    出         : 無
  34. * 說    名         : 該函數是在12MHZ晶振下,12分頻單片機的延時。
  35. *******************************************************************************/
  36. void Lcd1602_Delay1ms(uint c)   //誤差 0us
  37. {
  38.         uchar a,b;
  39.         for(;c>0;c--){
  40.                 for(b=199;b>0;b--){
  41.                         for(a=1;a>0;a--);
  42.                 }
  43.         }
  44. }
  45. /*******************************************************************************
  46. * 函 數 名         : LCD1602_DATAPINS
  47. * 函數功能                   : 更改74HC595連接LCD1602的數據
  48. * 輸    入         : value
  49. * 輸    出         : 無
  50. 74HC595傳送數據的常用寫法
  51. *******************************************************************************/   
  52. void LCD1602_DATAPINS(uchar value)
  53. {
  54.     uchar i;
  55.     for(i=0;i<8;i++)
  56.     {
  57.         LCD1602_DS=value&0x80;//取數據高位
  58.         if(LCD1602_DS==0x80){ //判斷數據高位是否為1
  59.             LCD1602_DS=1;//如果高位為1,DS置1
  60.         }
  61.         else{
  62.             LCD1602_DS=0;//否則DS置0
  63.         }
  64.         LCD1602_SHCP=0;
  65.         LCD1602_SHCP=1;//上升沿使這一位寫入移位寄存器
  66.         value<<=1;//數據左移1位,數據的第7位變為最高位,循環第8次時數據的最低位也變成最高位
  67.     }
  68.     LCD1602_STCP=0;
  69.     LCD1602_STCP=1;//給STCP一個上升沿,將for循環中輸入的數據移入輸出鎖存寄存器,刷新輸出數據
  70. }

  71. void LcdWriteCom(uchar com)          //寫入命令
  72. {
  73.         //LcdCalc(com>>4);        //發送高四位
  74. ……………………

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

Keil代碼與Proteus仿真下載: 利用可位尋址變量-hc595-1602.zip (102.37 KB, 下載次數: 30)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区四区在线 | 日韩视频一区二区在线 | 久久国品片 | 亚洲精品综合一区二区 | 亚洲va欧美va天堂v国产综合 | 亚洲视频在线观看一区二区三区 | 日韩在线资源 | 日韩免费网站 | 韩日一区 | 超碰人人做 | 日韩三级一区 | 看片网站在线 | 亚洲一区有码 | 欧美一区二区三区在线观看视频 | 天天综合久久网 | 99热精品国产 | 久久久久久久国产 | 国产精品日韩欧美一区二区三区 | 99热精品久久 | 久久亚洲一区二区三区四区 | 黄色日批视频 | 日本五月婷婷 | 久久国产精品偷 | 欧美激情精品久久久久久免费 | 精品福利在线视频 | 91免费观看视频 | 国产91精品久久久久久久网曝门 | 久久极品 | 91精品国产综合久久久久久丝袜 | 男女视频免费 | 欧美日韩视频在线播放 | 中文字幕一二三区 | 亚洲一区国产 | 6996成人影院网在线播放 | 艹逼网| 国产探花在线观看视频 | 日韩精品在线观看网站 | 久亚州在线播放 | 欧美日韩国产在线观看 | 精品视频一区二区三区在线观看 | 精品国产精品国产偷麻豆 |