熱門關鍵詞: 蘇州控制板生產廠家 液晶模塊種類 LCD液晶屏工作原理 什么是LED背光源
段碼液晶屏往往應用在出貨量比較大的家用消費類電子, 比如空調遙控器, 小時候帶的電子手表等, 都是段碼屏。 段碼屏是非標屏, 都是客戶定做的, 第一次開模費大概一兩千元, 廠家一般都會有起訂量的要求, 除此之外, 它的單位成本相對要比點陣屏要便宜, 而且我個人認為顯示的效果要比點陣屏漂亮...
段碼屏的驅動程序跟數碼管的靜態驅動程序一樣, 只要我們弄懂了怎樣顯示一個基本單位,根據此基本單位編寫一個字庫表, 然后用與(&)和或(|)這兩種位運算符就可以隨心所欲編寫我們要顯示的數字或者形狀。 有兩種常用的驅動方案:
第一種: 如果單片機內部集成了 seg 和 com 引腳的液晶驅動模塊, 直接用單片機驅動。
第二種: 單片機用 3 個 IO 口跟 HT1 621 進行通訊, 用 HT1 621 驅動段碼屏。
這節我重點介紹第二種。 HT1 621 有 4 個 COM, 分別是 com3,com2,com1 ,com0。 有 32 個SEG, 分別是 SEG0,SEG1 ….SEG31 。什么是 COM,
什么是 SEG? 用鴻哥的思路來解釋, COM 就是橫向上的 X 坐標, SEG 就是縱向上的 Y 坐標。坐標與 Y 坐標組合成一張表格, 每格代表一個顯示點。 比如 HT1 621 , 有4 個 COM, 32 個 SEG, 組成一個 32 行, 每行裝 4 個點的表格, 一共有 1 28 個點, 也就是最多可以顯示 1 28 個點, 用數碼管的思路, 最多可以顯示 1 28 個 LED 燈。 因為縱向上有 32行, 因此 Y 軸的地址范圍是
0 到 31 。 每一行 X 軸上的 4 個點, 我們用一個字節來表示。 一個字節有 8 位, 高 4 位分別代表這個 4 個點, 低 4 位為空。 比如第一行(SEG0 行)的第 1 個(COM3)要顯示, 第 2 個(COM2)要顯示, 第 3 個(COM1 )不要顯示, 第 4 個(COM0)不要顯示,那么用一個字節來表示就是十六進制的 0xc0.要把這兩個點點亮, 只要把 X 軸的數據設置成0xc0, Y 軸的數據設置成 0x00, 然后放到鴻哥精心研制的
seg_display(unsigned char col,unsigned char pag)驅動程序里就可以了.
(2) 功能需求:
在 COM 和 SEG 組成的 4X32 表格中, 顯示第二行的第 3 和第 4 兩個點。
(3) 硬件原理:
用單片機的 3 個 IO 口分別跟 HT1 621 的 CS,WR,DATA 連接。
(4) 源碼適合的單片機:STC1 1 F04E,晶振為 1 1 .0592MHz。
(5)
源代碼講解如下:
#include "REG52.H"
#include "absacc.h"
#include "intrins.h"
#include "stdio.h"
#define BIAS 0X52 //此處千萬小心, 鴻哥在上個月 的一個項目中就是在這里被
卡了 7 天。
//必須跟硬件電路的 COM 匹配。 1 個或者 2 個 COM:0x42。 3 個
COM:0x4A。 4 個 COM:0x52
#define RC256 0X30
#define SYSTEN 0X02
#define SYSDIS 0X00
#define LCDON 0X06
void SendBitToHT1 621 (unsigned char nbit,unsigned char n);//發送一個字節中的 N 位到
HT1 621 里,驅動程序的最底層部分
void write_com(unsigned char cmdcode); //寫命令到
LCD
void init_lcd(); //--初始化 LCD 屏
void seg_display(unsigned char col, unsigned char pag); //顯示基本單位點
void screen_clear (); //清空屏幕的內容
//補充說明: 吳堅鴻程序風格是這樣的, 凡是輸出 IO 后綴都是_dr,凡是輸入的//IO 后綴都//
是_sr
sbit ht1 62x_data_dr=P3^1 ;
sbit ht1 62x_cs_dr=P3^6;
sbit ht1 62x_wr_dr=P3^0;
main()
{
init_lcd(); //初始化液晶屏
screen_clear ();//清空整屏顯示內容
seg_display(0x30,1 ); //在 COM 和 SEG 組成的 4X32 表格中, 顯示第二行的第 3 和第 4
兩個點。
while(1 )
{
;
}
}
//發送一個字節中的 N 位到 HT1 621 里,驅動程序的最底層部分
void SendBitToHT1 621 (unsigned char nbit,unsigned char n)
{
unsigned char i;
for(i=0;i
ht1 62x_wr_dr=0;
if(nbit>=0x80) //判斷最高位
ht1 62x_data_dr=1 ;
else
ht1 62x_data_dr=0;
_nop_();
_nop_();
_nop_();
ht1 62x_wr_dr=1 ;
_nop_();
_nop_();
_nop_();
nbit<<=1 ;
}
}
//------------------寫命令到 LCD, ,驅動液晶程序的一部分------------------------------
void write_com(unsigned char cmdcode)
{
ht1 62x_cs_dr=0; //選通 HT1 621
_nop_();
_nop_();
SendBitToHT1 621 (0x80,4);
SendBitToHT1 621 (cmdcode,8);
_nop_();
_nop_();
ht1 62x_cs_dr=1 ;
_nop_();
_nop_();
_nop_();
}
咨詢熱線
13862038982