手頭有壞電子秤的段碼液晶,從網上買的段碼液晶屏帶有TM1621D。TM1621D與HT1621結構相同,只是引腳少,段碼少但容易業余制作。正好利用這兩種材料,自制段碼液晶模塊,并用普中開發板調試通過。
程序來自網上修改,權力歸原創作者所有。
0.JPG (2.33 MB, 下載次數: 106)
下載附件
清屏狀態
2020-2-18 10:41 上傳
1.JPG (1.57 MB, 下載次數: 106)
下載附件
點亮段碼
2020-2-18 10:41 上傳
2.JPG (1.73 MB, 下載次數: 109)
下載附件
全部點亮
2020-2-18 10:42 上傳
連接TM1621D模塊,
程序編譯后HEX文件下載到單片機
關掉下載程序,打開串口調試助手,設置4800波特率,
數據位8停止位1,無校驗無流控制,
勾選HEX發送,輸入80-8F之間的數據,顯示地址0-F。
輸入數據0d-16,1602顯示SEG數字,TM1621
對應段點亮。
注意5v電壓下程序BASE選1/2.選1/3全亮。
3v選1/3BASE
COM誤接成SEG,開機初始化即顯示88。
背光限流電阻1K,白天亮度略低。
VLCD電阻選10k.
段碼每位由兩個地址構成,每個地址4位數據(4段)
用串口調試助手發送必須輸成兩位
80(數據)0b-16(可串發)選定時發送10ms/次
清零:800b0c0d0e0f10111213141516
先81,再輸入0b-16中的任意數字,顯示對應段。
82
84
88
測試段
全顯示:8f0b0c0d0e0f10111213141516
單片機源程序如下:
- /*-****************************************
- 名稱:TM1621
- ******************************************/
- #include "TM1621.h"
- #include<reg52.h>
- #include "intrins.h" //包含nop指令頭文件
- #define uchar unsigned char //數據類型宏定義
- #define uint unsigned int //數據類型宏定義
- #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定義
- /******************以下TM1621模塊命令定義*********************/
- #define SYSDIS 0x00 //關系統振蕩器和LCD偏壓發生器
- #define SYSEN 0x02 //打開系統振蕩器
- #define LCDOFF 0x04 //關LCD偏壓
- #define LCDON 0x06 //開LCD偏壓
- #define TONEON 0x12 //打開聲音輸出
- #define TONEOFF 0x10 //關閉聲音輸出
- #define XTAL 0x28 //外部接晶振
- #define RC 0x30 //內部RC振蕩
- #define BIAS 0x52 //1/3偏壓 4公共口,0X52=1/2偏壓
- #define WDTDIS 0x0a //禁止看門狗
- #define WDTEN 0x0e //開啟看門狗
- /********************定義控制端口**********************/
- sbit CS=P2^2;
- sbit READ=P2^0;//無用
- sbit WRITE=P2^1;
- sbit DATA=P2^0;
- /********************延時函數*************************/
- void delay_nms(uint n)
- {
- uint i;
- while (n--)
- for (i=0;i<500;i++);
- }
- /********************從高位寫入數據*************************/
- void Write_Data_H(uchar Data, uchar Cnt) //Data的高cnt位寫入TM1621,高位在前
- {
- uchar i;
- for (i=0;i<Cnt;i++)
- {
- WRITE=0;
- if (Data&0x80) //從最高位發送
- DATA=1;
- else
- DATA=0;
- nop;
- nop;
- WRITE=1;
- Data<<=1;
- }
- WRITE=0;
- DATA=0;
- }
- /********************從低位寫入數據*************************/
- void Write_Data_L(uchar Data,uchar Cnt) //Data 的低cnt位寫入TM1621,低位在前
- {
- unsigned char i;
- for (i=0;i<Cnt;i++)
- {
- WRITE=0;
- if (Data&0x01) //從低位發送
- DATA=1;
- else
- DATA=0;
- nop;
- nop;
- WRITE=1;
- Data>>=1;
- }
- WRITE=0;
- DATA=0;
- }
- /********************寫入控制命令*************************/
- void WriteCmd(uchar Cmd)
- {
- CS=0;
- nop;
- Write_Data_H(0x80,4); //寫入命令標志100
- Write_Data_H(Cmd,8); //寫入命令數據
- CS=1;
- nop;
- }
- /*********指定地址寫入數據,實際寫入后4位************/
- void WriteOneData(uchar Addr, uchar Data)
- {
- CS=0;
- Write_Data_H(0xa0,3); //寫入數據標志101
- Write_Data_H(Addr<<2,6); //寫入地址數據(A5-A4-A3-A2-A1-A0)從高位開始寫數據
- Write_Data_L(Data,4); //寫入數據
- CS=1;
- nop;
- }
- /*********連續寫入方式,每次數據為8位,寫入數據************
- void WriteAllData(uchar Addr,uchar *p,uchar cnt)
- {
- uchar i;
- CS=0;
- Write_Data_H(0xa0,3); //寫入數據標志101
- Write_Data_H(Addr<<2,6); //寫入地址數據
- for(i=0;i<cnt;i++) //寫入數據
- {
- Write_Data_L(*p,8);
- p++;
- }
- CS=1;
- nop;
- }
- ***************這個子程序暫時沒用,注釋掉******************/
- /*******************TM1621初始化**********************/
- void TM1621_init()
- {
- CS=1;
- WRITE=1;
- DATA=1;
- nop;
- delay_nms(1);
- WriteCmd(BIAS); //1/3偏壓 4公共口
- WriteCmd(RC); //內部RC振蕩
- WriteCmd(SYSDIS); //關系統振蕩器和LCD偏壓發生器
- WriteCmd(WDTDIS); //禁止看門狗
- WriteCmd(SYSEN); //打開系統振蕩器
- WriteCmd(LCDON); //開LCD偏壓
-
- }
- /*************TM1621清屏函數*****************/
- void Clear1621()
- {
- uchar i;
- for(i=9;i<22;i++)
- {
- WriteOneData(i, 0x00);
- }
- }
- /*******************************************************************************
- * 函數名稱 :1621顯示函數顯示
- * 函數功能 :
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void Disp1621(uchar Addr, uchar Data)
- {
- WriteOneData(Addr, Data);
- }
復制代碼 全部資料51hei下載地址:
完全調試通過的1602和TM1621程序.rar
(1.91 MB, 下載次數: 483)
2020-2-18 10:42 上傳
點擊文件名下載附件
含COM-SEG表 下載積分: 黑幣 -5
|