8051程式!? - 第3頁 - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 網 路 生 活 分 享 區 > -- 閒 話 家 常 灌 水 版


PCZONE 討論區



通知

-- 閒 話 家 常 灌 水 版 上 面 那 些 硬 梆 梆 的 專 業 話 題 插 不 上 話 ?? 那 就 來 這 邊 就 你 周 遭 網 路 上 或 生 活 上 的 話 題 來 哈 拉 一 下

會員

各位:

嗯∼我知道的好像是!我要換的那顆他跟8051是同樣的內容!
好像頂多只是腳位的不同而已!!

回覆
會員

你應該先把要使用的所有IC及電路先確定好.

下面是我修改我用的一些 LCD 副程式, 你可能要針對你的電路或你的組譯器再做修改:

P8255Address equ 0000000000000000b
P8255PortA equ P8255Address
P8255PortB equ P8255Address+1
P8255PortC equ P8255Address+2
P8255Control equ P8255Address+3

LCD_RS_pin reg p1.3 ; 0 -> Command port, 1 -> Data port
LCD_RW_pin reg p1.4 ; 0 -> Write, 1 -> Read
LCD_Enable_pin reg p1.5 ; 1 -> Enable

LCDCommandPort equ P8255PortA
LCDDataPort equ P8255PortA
; +======================================+
; + The LCD Software Command code define +
; +======================================+
LCD_FunctionSet equ 00111000b ; 8-Bit, Dual line, 5 x 7 dots
LCD_DisplayON equ 00001111b ; Display On, Cursor On, Blink On
LCD_EntryMode equ 00000110b ; Cursor move increment
LCD_ShiftMode equ 00010000b ; Move Cursor

LCD_ClearCode equ 00000001b ; Display Clear, Home
LCD_CursorHome equ 00000010b ; Cursor Home
LCD_SetPosition equ 10000000b ; Set Cursor Position

LCD_BLINKCURSOR equ 00001111b
LCD_NORMALCURSOR equ 00001110b
LCD_NOCURSOR equ 00001100b

;==============================================================================
;
; LCD Module (16 x 2)
;
;==============================================================================

check_lcd_busy:
; push a
; mov dptr, #LCDCommandPort
;check_lcd_loop:
; clr LCD_RS_pin ; select Command port
; setb LCD_RW_pin
; setb LCD_Enable_pin
; movx a, @dptr
; clr LCD_Enable_pin
; jb a.7, check_lcd_loop
; pop a
lcd_delay:
; wait about 1.5 ms
push a
mov a, #00h
lcd_delay_wait:
nop
nop
nop
dec a
jnz lcd_delay_wait
pop a
ret

out_lcd_cmd:
mov dptr, #LCDCommandPort
clr LCD_RS_pin ; select Command port
clr LCD_RW_pin
setb LCD_Enable_pin
movx @dptr, a
nop
clr LCD_Enable_pin
setb LCD_RW_pin
ret

out_lcd_data:
mov dptr, #LCDDataPort
setb LCD_RS_pin ; select Data port
clr LCD_RW_pin
setb LCD_Enable_pin
movx @dptr, a
nop
clr LCD_Enable_pin
setb LCD_RW_pin
ret

outputlcdcmd:
push dph
push dpl
call check_lcd_busy
call out_lcd_cmd
pop dpl
pop dph
ret

display_init:
mov a, #LCD_FunctionSet ; 00111000b
call out_lcd_cmd
;
call lcd_delay
call lcd_delay
;
mov a, #LCD_NOCURSOR ; 00001100b
call out_lcd_cmd
;
call lcd_delay
;
mov a, #LCD_EntryMode ; 00000110b
call out_lcd_cmd
;
mov r7, #00h
djnz r7, $
ret

display_clear:
push dph
push dpl
call check_lcd_busy
mov a, #LCD_ClearCode
call out_lcd_cmd
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
pop dpl
pop dph
ret

return_home:
push dph
push dpl
call check_lcd_busy
mov a, #LCD_CursorHome
call out_lcd_cmd
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
call check_lcd_busy
pop dpl
pop dph
ret

; locate for LCD cursor
gotoxy:
jnb b.0, set_lcd_address
add a, #40h
set_lcd_address:
add a, #LCD_SetPosition
jmp outputlcdcmd

putch:
push dph
push dpl
call check_lcd_busy
call out_lcd_data
pop dpl
pop dph
ret

putdigit:
push a
swap a
anl a, #0Fh
add a, #'0'
call putch
pop a
anl a, #0Fh
add a, #'0'
call putch
ret

putdec:
mov b, #10
div b
add a, #'0'
call putch
mov a, b
add a, #'0'
call putch
ret

putstr:
clr a
movc a, @a+dptr
inc dptr
jz putstr_exit
call putch
jmp putstr
putstr_exit:
ret
回覆
會員

有~我電路大概都確定好了!!!就是那一個圖!!!
七斷顯示計改成lcd~
再來~cd4543
再來就是at89c2051這顆改成8051!!
其他都不變!!

大大您給的~lcd 程式~我會研究研究低!!!

如果小弟有不懂的地方希望可以再讓小弟發問!!!...謝謝
回覆
會員

@____________@||

請問一下!!您說您這個是~LCD副程式!?
也就是說...
我要是要把七斷顯示器改成LCD的話!
那就得把檔案中的程式改成這段囉???((有點看不懂說))
回覆
會員

你可以在 MAIN: 上面呼叫 LCD 副程式來初始化 LCD
call display_init
call display_clear
然後如果要在第一行的第按十格顯示數字12的話, 如下
mov a, #9
mov b, #0
call gotoxy
mov a, #'1'
call putch
mov a, #'2'
call putch
至於 LCD 程式可以放在程式的最後面

你看懂專題8051.txt裡面的程式了嗎?
你必須將原本 LED 顯示的部分拿掉, 然後再使用 LCD 副程式來顯示
另外你的程式應該還要保留超音波偵測的部分及主程式.

你 LCD 的連接腳位確定後我可以幫你改 LCD 副程式順便給你個顯示的範例
至於超音波部分你可能要自己研究囉!
回覆
會員

http://www.atmel.com/dyn/products/pr...p?part_id=1930

你先把上面網址的
Datasheets:
AT89C51 (17 pages, Updated 2/00)
的.pdf檔下載下來,
這檔的第一頁有一個叫PDIP的IC圖,看一看.....
你了解什麼叫P0.0~P0.7,P1.0~P1.7,P2.0~P2.7的接腳有什麼用處嗎....
這幾隻腳就是I/O腳,它可IN和OUT,所以就和你圖上的2051一樣的作用
也就是說2051的P什麼就跟8051是一樣的作用....所以2051的P什麼...
你愛接到8051上任何P什麼上都可...

先給你一建議....你應該把2051和8051的每隻接腳都搞清楚.....
這樣你就能改電路...你先看看吧....不行你再PO上來問吧~~~~
回覆
會員

引用:
最初由 C.C. 發表
你可以在 MAIN: 上面呼叫 LCD 副程式來初始化 LCD
call display_init
call display_clear
然後如果要在第一行的第按十格顯示數字12的話, 如下
mov a, #9
mov b, #0
call gotoxy
mov a, #'1'
call putch
mov a, #'2'
call putch
至於 LCD 程式可以放在程式的最後面

你看懂專題8051.txt裡面的程式了嗎?
你必須將原本 LED 顯示的部分拿掉, 然後再使用 LCD 副程式來顯示
另外你的程式應該還要保留超音波偵測的部分及主程式.

你 LCD 的連接腳位確定後我可以幫你改 LCD 副程式順便給你個顯示的範例
至於超音波部分你可能要自己研究囉!
呼~從完全無知之中!!!!到現在終於略懂了!!!
那如果說~我要改的話!!~~我就是~直接針對MAIN: 那段來作更改嗎??
回覆
會員

引用:
最初由 gwochern 發表
http://www.atmel.com/dyn/products/pr...p?part_id=1930

你先把上面網址的
Datasheets:
AT89C51 (17 pages, Updated 2/00)
的.pdf檔下載下來,
這檔的第一頁有一個叫PDIP的IC圖,看一看.....
你了解什麼叫P0.0~P0.7,P1.0~P1.7,P2.0~P2.7的接腳有什麼用處嗎....
這幾隻腳就是I/O腳,它可IN和OUT,所以就和你圖上的2051一樣的作用
也就是說2051的P什麼就跟8051是一樣的作用....所以2051的P什麼...
你愛接到8051上任何P什麼上都可...

先給你一建議....你應該把2051和8051的每隻接腳都搞清楚.....
這樣你就能改電路...你先看看吧....不行你再PO上來問吧~~~~

好~沒有問題!!
((正在載中))
我一定會好好的作公課的!!!!!!!

我先去研究一翻~



補充:
我要用的lcd是這顆!!!

回覆
會員

我了改了!!!我大概研究一下pdf的腳位!!
再對照一下我去買的書本的資料(8051)!!!
我發現~8051跟89c2051的腳位是一樣低!!!!!!!...

那如果是這樣的話!!我是不是只要把...把程式燒進去8051即可!?....
因為如果假設我都不改變腳位的話!!!及時8051與89c51的腳位也是一樣低!!!
像是那些~p1.0~p1.7!!等等的~都一樣!!!!??????
回覆
會員

沒錯! 假設只將 CPU 換成 8051 其他電路不換則程式完全一樣不需修改也能用.
最主要程式修改的部分應該就是你硬體有更動的部分(如 LCD 部分).

回覆







 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。