本次任務(wù)用瑞賽單片機R7C004驅(qū)動定制的段式液晶,4COM,18seg,1/3偏壓。由于單片機本身有段式液晶驅(qū)動,根據(jù)數(shù)據(jù)手冊可以知道其工作過程及控制方法。
過程分2步:1,配置硬件驅(qū)動寄存器。2,根據(jù)具體液晶情況,取模,定義聯(lián)合結(jié)構(gòu)體。
步驟1可以查看數(shù)據(jù)手冊,根據(jù)步驟配置寫程序配置程序如下:4COM,18個seg從seg0到seg18(出去seg11)
void LCD_Init(void)
{
HB_LCDM1=0;nop();
HB_LCDM0=0x4D;
HB_PFSEG0=0xf0;HB_PFSEG1=0xF7;HB_PFSEG2=0x07;
HB_PFSEG3=0x00;HB_PFSEG4=0x00;HB_PFSEG5=0x00;
HB_PFSEG6=0x00;
HB_LCDC0=0x16;
HB_VLCD=0X16;
us_delay(100);
HB_LCDM1=0x20;
nop();nop();nop();
HB_LCDM1|=0xc0;
HB_ISCLCD=0;
}
步驟2 液晶的具體情況如下2圖
我們根據(jù)圖1來設(shè)定取模,我把 56 78 910 、、、、兩兩合為一個字節(jié) 8位數(shù)據(jù)。 即8H 7C 7B 7A 7D 7E 7G 7F 這里的7 即代表數(shù)碼管的位置,7代表從右往左數(shù)第2位數(shù)碼管。
這樣H 即為0x80 A為0x10 我用宏定義設(shè)置每一段的數(shù)值
#define LcdSingMask 0x00
#define LcdSeg_a 0x10
#define LcdSeg_b 0x20
#define LcdSeg_c 0x40
#define LcdSeg_d 0x08
#define LcdSeg_e 0x04
#define LcdSeg_f 0x01
#define LcdSeg_g 0x02
并通過宏定義對0-f 和u 取模
#define Char_0 LcdSeg_a+LcdSeg_b+LcdSeg_c\
+LcdSeg_d+LcdSeg_e+LcdSeg_f
#define Char_1 LcdSeg_b+LcdSeg_c
#define Char_2 LcdSeg_a+LcdSeg_b\
+LcdSeg_d+LcdSeg_e+LcdSeg_g
#define Char_3 LcdSeg_a+LcdSeg_b+LcdSeg_c\
+LcdSeg_d+LcdSeg_g
#define Char_4 LcdSeg_b+LcdSeg_c\
+LcdSeg_f+LcdSeg_g
#define Char_5 LcdSeg_a+LcdSeg_c\
+LcdSeg_d+LcdSeg_f+LcdSeg_g
#define Char_6 LcdSeg_a+LcdSeg_g+LcdSeg_c\
+LcdSeg_d+LcdSeg_e+LcdSeg_f
#define Char_7 LcdSeg_a+LcdSeg_b+LcdSeg_c
#define Char_8 LcdSeg_a+LcdSeg_b+LcdSeg_c\
+LcdSeg_d+LcdSeg_e+LcdSeg_f+LcdSeg_g
#define Char_9 LcdSeg_a+LcdSeg_b+LcdSeg_c\
+LcdSeg_d+LcdSeg_f+LcdSeg_g
#define Char_A LcdSeg_a+LcdSeg_b+LcdSeg_c\
+LcdSeg_e+LcdSeg_f+LcdSeg_g
#define Char_b LcdSeg_c\
+LcdSeg_d+LcdSeg_e+LcdSeg_f+LcdSeg_g
#define Char_C LcdSeg_a+LcdSeg_f+LcdSeg_e+LcdSeg_d
#define Char_d LcdSeg_b+LcdSeg_c+LcdSeg_d\
+LcdSeg_e+LcdSeg_g
#define Char_E LcdSeg_a\
+LcdSeg_d+LcdSeg_e+LcdSeg_f+LcdSeg_g
#define Char_F LcdSeg_a+LcdSeg_f+LcdSeg_e+LcdSeg_g
#define Char_r LcdSeg_e+LcdSeg_g
#define Char_H LcdSeg_b+LcdSeg_c+LcdSeg_e+LcdSeg_f+LcdSeg_g
#define Char_L LcdSeg_d+LcdSeg_e+LcdSeg_f
#define Char_Row LcdSeg_g
#define Char_U LcdSeg_b+LcdSeg_c+LcdSeg_d+LcdSeg_e+LcdSeg_f
從圖一可以看到 基本上每兩個seg能完全配置一個數(shù)碼管,值得一提的是 ,我通過union來管理他們,簡潔明了。
typedef union {
uchar LCD_LgcBuf[Gcst_LCDBufSize];
struct{
struct
{
unsigned char Sign_7F:1;
unsigned char Sign_7G:1;
unsigned char Sign_7E:1;
unsigned char Sign_7D:1;
unsigned char Sign_7A:1;
unsigned char Sign_7B:1;
unsigned char Sign_7C:1;
unsigned char Sign_8H:1;
}Sign_SEG1_2;
struct
{
unsigned char Sign_8F:1;
unsigned char Sign_8G:1;
unsigned char Sign_8E:1;
unsigned char Sign_8D:1;
unsigned char Sign_8A:1;
unsigned char Sign_8B:1;
unsigned char Sign_8C:1;
unsigned char Sign_9H:1;
}Sign_SEG3_4;
struct
{
unsigned char Sign_9F:1;
unsigned char Sign_9G:1;
unsigned char Sign_9E:1;
unsigned char Sign_9D:1;
unsigned char Sign_9A:1;
unsigned char Sign_9B:1;
unsigned char Sign_9C:1;
unsigned char Sign_kWh:1;
}Sign_SEG5_6;
struct
{
unsigned char Sign_Jiner:1;
unsigned char Sign_10H:1;
unsigned char Sign_Yuan:1;
unsigned char Sign_V:1;
unsigned char Sign_6A:1;
unsigned char Sign_6B:1;
unsigned char Sign_6C:1;
unsigned char Sign_7H:1;
}Sign_SEG7_8;
struct
{
unsigned char Sign_6F:1;
unsigned char Sign_6G:1;
unsigned char Sign_6E:1;
unsigned char Sign_6D:1;
unsigned char Sign_Dian:1;
unsigned char Sign_11H:1;
unsigned char Sign_Shengyu:1;
unsigned char Sign_Dangqian:1;
}Sign_SEG9_10;
struct
{
unsigned char Sign_5A:1;
unsigned char Sign_5B:1;
unsigned char Sign_5C:1;
unsigned char Sign_6H:1;
unsigned char Sign_5F:1;
unsigned char Sign_5G:1;
unsigned char Sign_5E:1;
unsigned char Sign_5D:1;
}Sign_SEG11_12;
struct
{
unsigned char Sign_4A:1;
unsigned char Sign_4B:1;
unsigned char Sign_4C:1;
unsigned char Sign_5H:1;
unsigned char Sign_4F:1;
unsigned char Sign_4G:1;
unsigned char Sign_4E:1;
unsigned char Sign_4D:1;
}Sign_SEG13_14;
struct
{
unsigned char Sign_3A:1;
unsigned char Sign_3B:1;
unsigned char Sign_3C:1;
unsigned char Sign_4H:1;
unsigned char Sign_3F:1;
unsigned char Sign_3G:1;
unsigned char Sign_3E:1;
unsigned char Sign_3D:1;
}Sign_SEG15_16;
struct
{
unsigned char Sign_2A:1;
unsigned char Sign_2B:1;
unsigned char Sign_2C:1;
unsigned char Sign_A:1;
unsigned char Sign_2F:1;
unsigned char Sign_2G:1;
unsigned char Sign_2E:1;
unsigned char Sign_2D:1;
}Sign_SEG17_18;
}Signs;
}UnDef_LcdBuf;
這里初始化每個結(jié)構(gòu)體時,要把低為放前邊。
我把一些特殊的值單獨賦值,比如“當前”,“金額”。因為這些不是數(shù)碼,要根據(jù)特殊情況來置位。同樣用到宏定義。
#define Sign_Kwh_Dat GStr_LcdBuf.Signs.Sign_SEG5_6.Sign_kWh
#define Sign_V_Dat GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_V
#define Sign_Yuan_Dat GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_Yuan
#define Sign_A_Dat GStr_LcdBuf.Signs.Sign_SEG17_18.Sign_A
#define Sign_Shengyu_Dat GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Shengyu
#define Sign_Jiner_Dat GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_Jiner
#define Sign_Dianliang_Dat GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Dian
#define Sign_Dangqian_Dat GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Dangqian
#define Sign_P4_Dat GStr_LcdBuf.Signs.Sign_SEG15_16.Sign_4H
#define Sign_P5_Dat GStr_LcdBuf.Signs.Sign_SEG13_14.Sign_5H
#define Sign_P6_Dat GStr_LcdBuf.Signs.Sign_SEG11_12.Sign_6H
#define Sign_P7_Dat GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_7H
#define Sign_P8_Dat GStr_LcdBuf.Signs.Sign_SEG1_2.Sign_8H
#define Sign_P9_Dat GStr_LcdBuf.Signs.Sign_SEG3_4.Sign_9H
#define Sign_P10_Dat GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_10H
#define Sign_P11_Dat GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_11H
#define Dis_Kwh Sign_Kwh_Dat=1
#define Dis_Fu_V Sign_V_Dat=1
#define Dis_Yuan Sign_Yuan_Dat=1
#define Dis_An_A Sign_A_Dat=1
#define Dis_Shengyu Sign_Shengyu_Dat=1
#define Dis_Jin_e Sign_Jiner_Dat=1
#define Dis_Dianliang Sign_Dianliang_Dat=1
#define Dis_Dangqian Sign_Dangqian_Dat=1
#define Dis_Point5 Sign_P4_Dat=1
#define Dis_Point4 Sign_P5_Dat=1
#define Dis_Point3 Sign_P6_Dat=1
#define Dis_Point2 Sign_P7_Dat=1
#define Dis_Point1 Sign_P8_Dat=1
#define Dis_Point0 Sign_P9_Dat=1
#define Dis_Point10 Sign_P10_Dat=1
#define Dis_Point11 Sign_P11_Dat=1
取模和液晶對應(yīng)起來后,就可以寫基礎(chǔ)的賦值程序了。
根據(jù)瑞薩R7004數(shù)據(jù)手冊介紹,只需王顯示寄存器賦值既可以了。
賦值程序如下:
void Screen_convert(void)
{
*(LCD_StartAddr)=GStr_LcdBuf.LCD_LgcBuf[0]&0X0F;
*(LCD_StartAddr+1)=(GStr_LcdBuf.LCD_LgcBuf[0]>>4);
*(LCD_StartAddr+2)=GStr_LcdBuf.LCD_LgcBuf[1]&0X0F;
*(LCD_StartAddr+3)=(GStr_LcdBuf.LCD_LgcBuf[1]>>4);
*(LCD_StartAddr+4)=GStr_LcdBuf.LCD_LgcBuf[2]&0X0F;
*(LCD_StartAddr+5)=(GStr_LcdBuf.LCD_LgcBuf[2]>>4);
*(LCD_StartAddr+6)=GStr_LcdBuf.LCD_LgcBuf[3&0X0F];
*(LCD_StartAddr+7)=(GStr_LcdBuf.LCD_LgcBuf[3]>>4);
*(LCD_StartAddr+8)=GStr_LcdBuf.LCD_LgcBuf[4]&0X0F;
*(LCD_StartAddr+9)=(GStr_LcdBuf.LCD_LgcBuf[4]>>4);
*(LCD_StartAddr+10)=GStr_LcdBuf.LCD_LgcBuf[5]&0X0F;
*(LCD_StartAddr+12)=(GStr_LcdBuf.LCD_LgcBuf[5]>>4);
*(LCD_StartAddr+13)=GStr_LcdBuf.LCD_LgcBuf[6]&0X0F;
*(LCD_StartAddr+14)=(GStr_LcdBuf.LCD_LgcBuf[6]>>4);
*(LCD_StartAddr+15)=GStr_LcdBuf.LCD_LgcBuf[7]&0X0F;
*(LCD_StartAddr+16)=(GStr_LcdBuf.LCD_LgcBuf[7]>>4);
*(LCD_StartAddr+17)=GStr_LcdBuf.LCD_LgcBuf[8]&0X0F;
*(LCD_StartAddr+18)=(GStr_LcdBuf.LCD_LgcBuf[8]>>4);
}
LCD_StartAddr為寄存器首地址,數(shù)據(jù)手冊有。把一個字節(jié)分為高低4位,賦值給連續(xù)的兩個顯示寄存器,就可正常顯示一個數(shù)碼管的數(shù)字了。接下來介紹怎么王數(shù)組里填充數(shù)值。
void Dis_1char(uchar PuB_position,uchar PuB_data){
uchar LuW_Dat;
LuW_Dat=GAuB_char_tbl[PuB_data];
switch(PuB_position)
{
case 0: GStr_LcdBuf.LCD_LgcBuf[2]=LuW_Dat;break;
case 1: GStr_LcdBuf.LCD_LgcBuf[1]=LuW_Dat;break;
case 2: GStr_LcdBuf.LCD_LgcBuf[0]=LuW_Dat;break;
case 3: GStr_LcdBuf.LCD_LgcBuf[3]|=(LuW_Dat&0xf0);GStr_LcdBuf.LCD_LgcBuf[4]|=(LuW_Dat&0x0f);break;
case 4: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[5]=LuW_Dat;break;
case 5: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[6]=LuW_Dat;break;
case 6: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[7]=LuW_Dat;break;
case 7: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[8]=LuW_Dat;break;
default: break;
}
}
這里要注意GStr_LcdBuf.LCD_LgcBuf[?]的順序和要顯示的位置的關(guān)系,和圖一一一對應(yīng),比如要顯示0位置時,可根據(jù)圖1的 要用9A-9C,K那兩個seg 即GStr_LcdBuf.LCD_LgcBuf[2]。位置3,有點特殊,他分別用到了數(shù)組3的高4位,和數(shù)組4的低四位。位置4-7,高低四位又反過來,所以要加zhihuan(LuW_Dat);實現(xiàn)高低4為互換。
#define zhihuan(dat) ((dat>>4)|(dat<<4))
了解基本的顯示程序后,顯示的步驟為:
1,LCD_Init()
2,Dis_1char(PuB_position,PuB_data),,還可以有Sign_Kwh_Dat、Dis_Jin_e、Dis_Point0之類。
3,Screen_convert()
上一篇:[STM8L]TAB段式LCD液晶驅(qū)動程序
下一篇:單片機控制TFT液晶屏顯示數(shù)字
推薦閱讀
史海拾趣
面對工業(yè)4.0的浪潮,乾坤公司積極響應(yīng)國家智能制造的號召,開始進行智能制造的轉(zhuǎn)型。公司引進了先進的自動化設(shè)備,對生產(chǎn)線進行了全面升級,實現(xiàn)了生產(chǎn)過程的自動化、信息化和智能化。通過智能制造的轉(zhuǎn)型,乾坤不僅提高了生產(chǎn)效率,還降低了生產(chǎn)成本,同時提升了產(chǎn)品的一致性和可靠性。這一轉(zhuǎn)型為乾坤公司的持續(xù)發(fā)展注入了新的動力,使其在激烈的市場競爭中保持了領(lǐng)先地位。
近年來,隨著環(huán)保意識的提高和政府對塑料污染治理的關(guān)注,BOPLA積極響應(yīng)國家號召,開始研發(fā)和推廣生物基可降解材料。經(jīng)過多年的努力,公司成功推出了BOPLA生物基膜材,實現(xiàn)了產(chǎn)品的綠色轉(zhuǎn)型。這一創(chuàng)新不僅有助于減少塑料污染,還為公司贏得了更多的環(huán)保意識和綠色消費市場的青睞。
BOPLA公司成立于XXXX年,初期主要致力于電子開關(guān)、熔斷器等基礎(chǔ)電子元件的研發(fā)與生產(chǎn)。創(chuàng)始人憑借對電子行業(yè)的深厚理解和敏銳的市場洞察力,帶領(lǐng)公司逐步在競爭激烈的市場中站穩(wěn)腳跟。通過不斷的技術(shù)創(chuàng)新和品質(zhì)提升,BOPLA的產(chǎn)品逐漸獲得了客戶的認可,為公司后續(xù)的發(fā)展奠定了堅實的基礎(chǔ)。
在電子行業(yè)中,品質(zhì)控制和質(zhì)量管理是企業(yè)生存和發(fā)展的關(guān)鍵。凱勵公司深知這一點,建立了嚴格的質(zhì)量管理體系和檢測機制。公司從原材料采購到生產(chǎn)制造、產(chǎn)品檢測等各個環(huán)節(jié)都嚴格把控品質(zhì),確保產(chǎn)品的穩(wěn)定性和可靠性。此外,凱勵公司還引進了先進的生產(chǎn)設(shè)備和檢測儀器,提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。
在電子行業(yè)中,品質(zhì)控制和質(zhì)量管理是企業(yè)生存和發(fā)展的關(guān)鍵。凱勵公司深知這一點,建立了嚴格的質(zhì)量管理體系和檢測機制。公司從原材料采購到生產(chǎn)制造、產(chǎn)品檢測等各個環(huán)節(jié)都嚴格把控品質(zhì),確保產(chǎn)品的穩(wěn)定性和可靠性。此外,凱勵公司還引進了先進的生產(chǎn)設(shè)備和檢測儀器,提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。
多年來,GAIA蓋亞電源憑借其卓越的產(chǎn)品性能和專業(yè)的技術(shù)支持,贏得了眾多知名客戶的信賴和合作。這些客戶涵蓋了航空航天、軍事、交通運輸、工業(yè)自動化等多個領(lǐng)域。在與客戶的合作過程中,GAIA蓋亞電源不僅提供了高質(zhì)量的產(chǎn)品和服務(wù),還與客戶共同研發(fā)了多項創(chuàng)新解決方案,幫助客戶解決了許多技術(shù)難題。這些成功案例不僅彰顯了GAIA蓋亞電源的技術(shù)實力和市場競爭力,也為其在電子行業(yè)的發(fā)展奠定了堅實的基礎(chǔ)。
新奇巧克力閃盤 看上去惟妙惟肖,確實很像巧克力,用這款U盤的時候,得離孩子遠點 帶液晶屏幕的U盤 此款產(chǎn)品自帶的液晶屏幕不僅可以顯示百分比讀數(shù)還能夠以數(shù)字形態(tài)來標識所剩容量多少 黃金Droid U盤 該款U盤內(nèi)置了1 ...… 查看全部問答∨ |
C51,怎么統(tǒng)計與分析多路脈沖?(比較初級,請多指教) C51,怎么統(tǒng)計與分析多路脈沖?(比較初級,請多指教)。 有兩路外部脈沖輸入,脈沖周期相同,同時以他們的高低電平的不同可以取到00,01,10,11,兩路四個組合的值。 請教:這兩路輸入在電路上怎么與C51連接? 程序上又怎么實現(xiàn)脈沖的計數(shù)以及對 ...… 查看全部問答∨ |
我用的設(shè)備是MOXA74XX,該設(shè)備能提供多個串口。我的程序目的是要多個串口要同時讀取數(shù)據(jù)。我程序?qū)崿F(xiàn)是:每個串口開啟兩個定時器A、B,定時器A每間隔5秒,發(fā)送一個讀取命令,定時器B則每間隔0.5秒不停的讀串口返回的數(shù)據(jù)。如果定時器B收的數(shù)據(jù)正確 ...… 查看全部問答∨ |
wince 熱啟動不調(diào)用 OALIoCtlHalInitRTC 函數(shù)來初始化時鐘 ? 平臺 wince6.0 + pxa270 現(xiàn)在發(fā)現(xiàn)一個小問題, 如果短時間關(guān)機或者重啟,發(fā)現(xiàn)啟動過程中 沒有調(diào)用 OALIoCtlHalInitRTC 函數(shù), 這樣進入 os后,時間變?yōu)?2000了 如果是冷啟動的話,它是正常調(diào)用 OALIoCtlHalInitRTC 函數(shù)來從外部rtc獲取時間來初 ...… 查看全部問答∨ |
1. -----Maxim提供MR16燈的換代方案嗎?2. 在使用MAX6955器件做LED顯示和鍵盤驅(qū)動時,當我在寫入要顯示的字符時,器件能正常顯示,但是當我讀取鍵盤鍵值時,不能正常讀取,根據(jù)數(shù)據(jù)資料說 ...… 查看全部問答∨ |
|
嶄新的新人來求教了。我對單片機C語言不是很了解。只學過C語言和單片機技術(shù)。 在仿真的時候,不能正確顯示LED數(shù)字。一直在變化。功率因數(shù)輸不出去。。。。 求更改、。。 #include #include #include #define _TH0_TL0_   ...… 查看全部問答∨ |
首先說明公司用cadence,剛畢業(yè)沒幾個月,剛剛搗鼓這個軟件,所以說的不一定正確。 此貼講的就是數(shù)字地里面隔離出一塊模擬地。 (一)首先把一小塊模擬地鋪上,在鋪大的數(shù)字地,如圖 (二)菜單欄里如此選擇 (三)因為這里是數(shù)字地把模擬地也 ...… 查看全部問答∨ |
設(shè)計資源 培訓 開發(fā)板 精華推薦
- 2025中國工博會集成電路展區(qū)陣容揭曉!行業(yè)巨頭齊聚,共繪“芯”藍圖
- 消息稱三星在美“特斯拉專供”2nm 生產(chǎn)線 2026H2 投運,初期產(chǎn)能每月 1~1.5 萬片晶圓
- 黑客如何入侵軟件定義的汽車
- 中國首款國芯腦機智能頭環(huán)正式發(fā)布:非侵入式腦機 全自主國產(chǎn)芯片
- 自動駕駛中Transformer大模型會取代深度學習嗎?
- 這家面板廠在車載OLED領(lǐng)域或再迎新大單
- 激光雷達和攝像頭,誰會是機器人主要的“眼睛”?
- 毫米波雷達技術(shù)參數(shù)有哪些?毫米波雷達如何用于機器人導航
- 毫米波雷達技術(shù)有哪些優(yōu)勢?如何提高毫米波雷達測距精度
- 工業(yè)邊緣設(shè)備的安全啟動,TPM 2.0與可信執(zhí)行環(huán)境(TEE)的硬件級防護
- 寧德時代嗅到行業(yè)危機,擬在2030年前推出續(xù)航超800公里的新電池技術(shù)
- 百萬續(xù)航不是夢?特斯拉電池團隊稱即將突破電池能量密度技術(shù)障礙
- 華為芯片遭斷供,為何國產(chǎn)車企卻慌了?
- 智充科技:新能源車高性價比時代,“極致化”充電體驗引領(lǐng)未來
- 中國新能源汽車被歐洲趕超 寧德時代:別讓海外搶了先機
- 聯(lián)發(fā)科中止收購Intel旗下電源芯片業(yè)務(wù)
- 英飛凌推出面向航天級FPGA的符合QML-V標準的抗輻射NOR閃存
- Silicon Labs宣布完成基礎(chǔ)設(shè)施和汽車業(yè)務(wù)的出售
- 艾邁斯歐司朗聚焦四大領(lǐng)域賦能智能駕駛等產(chǎn)業(yè)
- DM9000驅(qū)動移植在mini2440和FS4412上的實現(xiàn)(deep dive)