昨天把LCD 16x2文字型液晶顯示的電路圖畫完了所以趕快分享,讓想試看看的車友試試,基本上我比較建議用LCD液晶,因為太陽照下來也會看得比LED數字清楚,LCD 16x2就是下面那個圖片有16隻腳,不要買到串列式的,而且最好買背光的,晚上才看得到,GOOGLE一下可發現多種顏色,一樣想做卻有任何問題的請直接PM
勿做商業用途
電路圖
8051組合語言程式,程式有點不對齊自己喬一下,燒錄問題一樣自己處理,不幫忙,謝謝
;轉速表(60s/幾s動一次=幾轉),兩個波形顯示一次,但只取一個計算 ;訊號線對的話不分單雙缸或四缸都不用修改就可以用 ;最高轉速只顯示240秒 RS REG P1.5 ;RS=P1.5 RW REG P1.6 ;RW=P1.6 E REG P1.7 ;E =P1.7 ORG 00H JMP Init_LCG ORG 0BH JMP TIMERINT Init_LCG: MOV P0,#00H MOV P2,#00000001B ;設輸入腳 MOV 20H,#0 MOV 21H,#0 MOV 30H,#0 MOV 31H,#0 MOV 2CH,#0 ;顯示速轉 MOV 2DH,#0 ;顯示最高速轉 MOV 36H,#0 ;舊的轉時十位 MOV 37H,#0 ;舊的轉時百位 MOV 38H,#0 ;舊的轉時千位 MOV 39H,#0 ;舊的轉速萬位 MOV 3AH,#0 ;轉速比較 MOV 3BH,#0 ;顯示暫存 MOV 3CH,#0 ;轉速餘數暫存 MOV 3DH,#0 ;0.5秒 MOV 3EH,#0 ;秒 MOV 3FH,#0 ;分 MOV 40H,#0 ;時 MOV 41H,#1 ;1表示秒要顯示時間 MOV 42H,#1 ;1表示分要顯示時間 MOV 43H,#1 ;1表示時要顯示時間 MOV 44H,#255 ;240秒最高轉速歸0 MOV SP,#50H ;50H開始堆疊 MOV TMOD,#00000001B MOV TH0,#>(65536-50000) MOV TL0,#<(65536-50000) MOV IE,#10000010B DELAY1: MOV R7,#5 ;延遲0.5秒 DEL11: MOV R6,#249 DEL12: MOV R5,#200 DEL13: DJNZ R5,DEL13 DJNZ R6,DEL12 DJNZ R7,DEL11 MOV A,#38H CALL LCG_CMD ;設定8位元資料傳送,顯示2行,字形是5x7 MOV A,#0CH CALL LCG_CMD ;游標所在處不閃爍也不顯示游標 MOV A,#06H CALL LCG_CMD ;寫入資料後游標自動跳到下一個位置 MOV A,#01H CALL LCG_CMD ;清除顯示RAM MOV A,#85H CALL LCG_CMD ;第1行第5個位置 MOV A,#30H CALL LCG_DATA ;顯示0 MOV A,#87H ;第1行第7個位置 CALL LCG_CMD MOV A,#72H CALL LCG_DATA ;顯示r MOV A,#70H CALL LCG_DATA ;顯示p MOV A,#6DH CALL LCG_DATA ;顯示m MOV A,#2FH CALL LCG_DATA ;顯示/ MOV A,#6DH CALL LCG_DATA ;顯示m MOV A,#69H CALL LCG_DATA ;顯示i MOV A,#6EH CALL LCG_DATA ;顯示n MOV A,#C5H CALL LCG_CMD ;第2行第5個位置 MOV A,#30H CALL LCG_DATA ;顯示0 MOV A,#CAH CALL LCG_CMD ;第1行第10個位置 MOV A,#3AH CALL LCG_DATA ;顯示: MOV A,#CDH CALL LCG_CMD ;第1行第13個位置 MOV A,#3AH CALL LCG_DATA ;顯示: SETB TR0 START0: MOV A,30H CLR C ADD A,#1 ;11us=+1次 MOV 30H,A MOV A,31H ADDC A,#0 MOV 31H,A CJNE A,#016H,START1 MOV 29H,#0 JMP SSU0 START1: JB P2.0,START0 ;等待脈波=+v START2: MOV A,30H CLR C ADD A,#1 ;11us=+1次 MOV 30H,A MOV A,31H ADDC A,#0 MOV 31H,A CJNE A,#016H,START3 MOV 29H,#0 JMP SSU0 START3: JNB P2.0,START2 ;等待脈波=-v WAIT: MOV A,20H CLR C ADD A,#1 ;11us=+1次 MOV 20H,A MOV A,21H ADDC A,#0 MOV 21H,A CJNE A,#016H,WAIT1 MOV 29H,#0 ;<1000轉 JMP SSU0 WAIT1: JB P2.0,WAIT ;等待脈波=+v WAIT2: MOV A,20H CLR C ADD A,#1 ;11us=+1次 MOV 20H,A MOV A,21H ADDC A,#0 MOV 21H,A CJNE A,#016H,WAIT3 MOV 29H,#0 ;<1000轉 JMP SSU0 WAIT3: JNB P2.0,WAIT2 ;等待脈波=-v MOV 22H,#0 MOV 23H,#023H ;60s/11us/50轉+1 MOV 24H,#0AAH MOV 25H,#01H MOV 26H,#0 ;餘數 MOV 27H,#0 MOV 28H,#0 MOV 29H,#0 ;商=幾十轉 MOV 2AH,#0 MOV 2BH,#0 MOV R7,#18H CLR A LOOP: MOV R0,#23H XCH A,@R0 RLC A XCH A,@R0 INC R0 XCH A,@R0 RLC A XCH A,@R0 INC R0 XCH A,@R0 RLC A XCH A,@R0 MOV R0,#26H MOV A,@R0 RLC A MOV @R0,A INC R0 MOV A,@R0 RLC A MOV @R0,A INC R0 MOV A,@R0 RLC A MOV @R0,A MOV R3,26H MOV R4,27H MOV R5,28H MOV R2,#03H CLR C MOV R1,#20H MOV R0,#26H SUB3: MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,SUB3 JNC SKIP MOV 26H,R3 MOV 27H,R4 MOV 28H,R5 SKIP: CPL C MOV R1,#29H XCH A,@R1 RLC A XCH A,@R1 INC R1 XCH A,@R1 RLC A XCH A,@R1 INC R1 XCH A,@R1 RLC A XCH A,@R1 DJNZ R7,LOOP SSU0: MOV A,29H INC 3AH CJNE A,#29,RPM00 ;1400轉以下直接顯示 RPM00: JC RPM05 MOV A,29H CLR C SUBB A,2CH JNZ RPM01 JMP RPME ;新.顯示相同 RPM01: JNC RPM002 CPL A INC A CJNE A,#4,RPM001 RPM001: JNC RPM04 ;>=250 加快顯示 INC 3AH JMP RPM02 RPM002: CJNE A,#5,RPM003 ;>=250 加快顯示 RPM003: JNC RPM04 RPM02: MOV A,3AH CJNE A,#6,RPM03 ;6次顯示一次 RPM03: JNC RPM04 JMP RPME RPM04: MOV 3AH,#0 RPM05: MOV A,29H CLR C SUBB A,2CH JNZ RPM1 JMP RPME ;新.顯示相同 RPM1: JNC RPM2 CPL A INC A DEC 2CH CJNE A,#19,RPM11 RPM11: JC RPM3 DEC 2CH DEC 2CH ;差>=1000轉減150轉 CJNE A,#29,RPM12 RPM12: JC RPM3 DEC 2CH DEC 2CH DEC 2CH DEC 2CH ;差>=1500轉減350轉 JMP RPM3 RPM2: INC 2CH CJNE A,#20,RPM21 RPM21: JC RPM3 INC 2CH INC 2CH ;差>=1000轉加150轉 CJNE A,#30,RPM22 RPM22: JC RPM3 INC 2CH INC 2CH INC 2CH INC 2CH ;差>=1500轉加350轉 RPM3: MOV A,2CH MOV B,#2 DIV AB MOV 3CH,B MOV R4,A CALL XXX MOV A,R5 CJNE A,39H,RPM31 JMP RPM4 RPM31: MOV 39H,A CJNE A,#10,RPM32 MOV 3BH,#20H ;清除萬位 JMP RPM33 RPM32: ADD A,#30H ;數字=萬位 MOV 3BH,A RPM33: MOV A,#81H ;萬位顯示 第1行第1個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示萬位 RPM4: MOV A,R6 CJNE A,38H,RPM41 JMP RPM5 RPM41: MOV 38H,A CJNE A,#10,RPM42 MOV 3BH,#20H ;清除千位 JMP RPM43 RPM42: ADD A,#30H ;數字=千位 MOV 3BH,A RPM43: MOV A,#82H ;千位顯示 第1行第2個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示千位 RPM5: MOV A,R4 JNZ RPM50 MOV A,#10 JMP RPM51 RPM50: MOV A,R7 CJNE A,37H,RPM51 JMP RPM6 RPM51: MOV 37H,A CJNE A,#10,RPM52 MOV 3BH,#20H ;清除百位 JMP RPM53 RPM52: ADD A,#30H ;數字=百位 MOV 3BH,A RPM53: MOV A,#83H ;百位顯示 第1行第3個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示百位 RPM6: MOV A,3CH MOV B,#5 MUL AB CJNE A,36H,RPM61 JMP RPME RPM61: MOV 36H,A MOV A,2CH JNZ RPM62 MOV 3BH,#20H ;清除十位 MOV 36H,#10 JMP RPM63 RPM62: MOV A,36H ;數字=十位 ADD A,#30H MOV 3BH,A RPM63: MOV A,#84H ;十位顯示 第1行第4個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示十位 RPME: MOV A,2CH CJNE A,2DH,HIGH0 HIGH0: JNC HIGH2 MOV A,44H CJNE A,#15,HIGH1 JMP HIGH2 HIGH1: JMP HIGHE HIGH2: MOV A,2CH MOV 2DH,A MOV B,#2 DIV AB MOV 3CH,B MOV R4,A CALL XXX MOV A,R5 CJNE A,#10,HIGH3 MOV 3BH,#20H ;清除萬位 JMP HIGH4 HIGH3: ADD A,#30H ;數字=萬位 MOV 3BH,A HIGH4: MOV A,#C1H ;最高轉萬位顯示 第2行第1個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示萬位 MOV A,R6 CJNE A,#10,HIGH5 MOV 3BH,#20H ;清除千位 JMP HIGH6 HIGH5: ADD A,#30H ;數字=千位 MOV 3BH,A HIGH6: MOV A,#C2H ;最高轉千位顯示 第2行第2個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示千位 MOV A,R4 JNZ HIGH7 MOV 3BH,#20H ;清除百位 JMP HIGH10 HIGH7: MOV A,R7 ADD A,#30H ;數字=百位 MOV 3BH,A HIGH10: MOV A,#C3H ;最高轉百位顯示 第2行第3個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示百位 MOV A,3CH MOV B,#5 MUL AB MOV 3BH,A MOV A,2CH JNZ HIGH11 MOV 3BH,#20H ;清除十位 JMP HIGH12 HIGH11: MOV A,3BH ;數字=十位 ADD A,#30H MOV 3BH,A HIGH12: MOV A,#C4H ;最高轉十位顯示 第2行第4個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示十位 MOV 44H,#255 HIGHE: MOV A,43H JNZ TIME1 JMP TIME4 TIME1: MOV 43H,#0 MOV A,40H MOV B,#10 DIV AB ADD A,#30H MOV 3BH,A MOV A,#C8H ;時十位顯示 第2行第8個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示時十位 MOV A,B ADD A,#30H MOV 3BH,A MOV A,#C9H ;時個位顯示 第2行第9個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示時個位 TIME2: MOV 42H,#0 MOV A,3FH MOV B,#10 DIV AB ADD A,#30H MOV 3BH,A MOV A,#CBH ;分十位顯示 第2行第11個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示分十位 MOV A,B ADD A,#30H MOV 3BH,A MOV A,#CCH ;分個位顯示 第2行第12個位置 CALL LCG_CMD MOV A,3BH CALL LCG_DATA ;顯示分個位 TIME3: MOV 41H,#0 MOV A,#CEH ;秒十位顯示 第2行第14個位置 CALL LCG_CMD MOV A,3EH MOV B,#10 DIV AB ADD A,#30H CALL LCG_DATA ;顯示秒十位 MOV A,#CFH ;秒十個顯示 第2行第15個位置 CALL LCG_CMD MOV A,B ADD A,#30H CALL LCG_DATA ;顯示秒個位 JMP TIME0 TIME4: MOV A,42H JNZ TIME2 MOV A,41H JNZ TIME3 TIME0: MOV 20H,#0 MOV 21H,#0 MOV 30H,#0 MOV 31H,#0 JMP START0 ;時間50000=50MS TIMERINT: MOV TH0,#>(65536-50000) MOV TL0,#<(65536-50000) PUSH A PUSH B PUSH PSW INC 3DH MOV A,3DH CJNE A,#20,TIMEE MOV 3DH,#0 INC 3EH INC 41H DEC 44H MOV A,44H CJNE A,#14,TIMEE0 INC 44H MOV 2DH,#0 TIMEE0: MOV A,3EH CJNE A,#60,TIMEE MOV 3EH,#0 INC 3FH INC 42H MOV A,3FH CJNE A,#60,TIMEE MOV 3FH,#0 INC 40H INC 43H TIMEE: POP PSW POP B POP A RETI ;抓取個十百位數字 XXX: MOV B,#10 DIV AB MOV R7,B ;R7=個位 CJNE A,#10,XXX1 XXX1: JNC XXX3 MOV R5,#10 ;R5=百位清除 JNZ XXX2 ;0~9 MOV R6,#10 ;R6=十位清除 JMP XXX4 XXX2: ;10~99 MOV R6,A ;R6=十位 JMP XXX4 XXX3: ;大於100 MOV B,#10 DIV AB MOV R6,B ;R6=十位 MOV R5,A ;R5=百位 XXX4: RET ;寫入指令碼副程式 LCG_CMD: CLR RW ;RW=0,寫入 CLR RS ;RS=0,指令 SETB E ;E= 1,致能LCD MOV P3,A ;P3=A,送出命令值 (為一負緣動作) CLR E ;E= 0,除能LCD CALL CHKBUSY ;呼叫LCD忙碌檢查等待 RET ;寫入圖形資料?{式 LCG_DATA: CLR RW ;RW=0,寫入 SETB RS ;RS=1,資料 SETB E ;E= 1,致能LCD MOV P3,A ;P3=A,送出顯示值 (為一負緣動作) CLR E ;E= 0,除能LCD CALL CHKBUSY ;呼叫LCD忙碌檢查等待 RET ;忙碌狀態檢查副程式 CHKBUSY: MOV P3,#0FFH ;P3=0FFH,P3設定為輸入埠 SETB RW ;RW=1,讀取 CLR RS ;RS=0,指令 SETB E ;E= 1,致能LCD MOV A,P3 ;A=P3,獲得狀態??(為一高態動作) CLR E ;E= 0,除能LCD ANL A,#80H ;A=A&80H,保留BF忙碌旗標 JNZ CHKBUSY ;若DB7<>#0則跳至WAIT1 RET END
LCD 16x2文字型液晶顯示大概說明,第一行顯示目前轉速,第二行顯示最高轉速和通電後騎乘多少時間(方便看熱車多久),最高轉速在240秒後會歸0重新抓取和顯示
12750 rpm/min
12750 00:00:00
轉速訊號線接線圖,我FZR是接W/R 白/紅線(W/L和W/Y應該也可以),其他車種請自己找,謝謝
1.三相交流發電機 2.整流/調整器 8.C.D.I元件 9和10.點火線圈
功能說明 - 化油器車應該都可以,噴射車不知道,這版本有在GOING 50上實測才交給機車行認識的學徒,是2010年設計的
- 顯示是以50轉為單位加減,不是抓取多少就顯示多少,新舊差太多才會以150轉為單位加減,最高轉速可顯示12750 rpm/min,超過會顯示錯誤,除了少數像FZR 250四缸可達15000轉以上,其他大部份的車都不會超過,但是改一下程式達到2萬轉以上都沒問題
- 改變顯示時間以反應時間而定,不過我有加入延遲,讓看起來不會改變很快,避免不容易看清楚,不習慣的可以自己修改程式
- 反應時間最慢0.15秒(400轉),0.0047秒(12750轉)
無實際影片,要看的話請參加元旦南橫一日遊,我車上有裝另一種LCD繪圖型的,如下圖 後續還有時速表會分享,再來是檔位表(原車無顯示檔位功能的車可裝)分享
|