首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

51單片機總線型與非總線型 1602 液晶驅動代碼對比

     編輯:關於C語言

非總線型(GPIO 模擬時序)

完全按 HD44780 數據手冊時序圖,逐個翻轉 GPIO 實現:

#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;

sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_EN = P1^2;

// 延時、寫命令、寫數據、初始化、顯示字符串…
// 代碼量大,需手動控制 RS/RW/EN 高低電平與延時
  • 優點:引腳任意分配,無額外硬件成本,適合 GPIO 豐富、外設較少的場景。
  • 缺點:代碼冗長、維護困難、佔用大量 CPU 時間等待延時、時序易出錯。

總線型(外掛地址解碼電路)

利用 8051 外部總線(P0 作為 AD0-AD7,P2 高位地址),通過 74LS373 鎖存地址,地址解碼電路將特定地址映射為 LCD 命令/數據寄存器:

#include <AT89X51.H>
#include <absacc.h>

#define LCD_COM  XBYTE[0xD000]  // 命令寄存器地址
#define LCD_Data XBYTE[0xD001]  // 數據寄存器地址

// 寫命令:LCD_COM = 0x38;
// 寫數據:LCD_Data = 'A';

原理圖關鍵點

  • P0 口複用為地址/數據總線(需 74LS373 鎖存低 8 位地址)。
  • P2 口輸出高位地址 A8-A15。
  • 地址解碼電路(如 74LS138、GAL、CPLD)將 0xD000/0xD001 映射為 LCD 的 RS=0/RS=1 片選信號。
  • WR、RD 信號連接 LCD 的 E/RW(或經邏輯組合)。

代碼量與效率對比

維度非總線型總線型
核心驅動代碼行數~80-120 行~20-30 行
寫一個字符指令數~15-20 條(含延時循環)1 條 MOVX @DPTR, A
CPU 佔用率高(阻塞延時)極低(單指令)
硬件成本0解碼電路 + 鎖存器
移植性強(僅依賴 GPIO)依賴總線時序與地址映射

擴展:其他總線技術

  • I2C / SPI:串行總線,佔用 2-4 根 IO,速度較並行總線慢但引腳少。
  • CAN:車載/工業總線,強抗幹擾、多主機仲裁。
  • 1-Wire:單根數據線供電通訊,極簡接線。

總結

總線型設計將時序控制下推到硬件,軟件極度精簡,是嵌入式系統「軟硬件協同」的經典案例。學會總線型思維,對後續 ARM、DSP、FPGA 等外設擴展極有幫助。正如作者所言:「按照總線型來設計電路圖、寫程序,真心好。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved