8051程式!?



贊助商連結


頁 : 1 2 [3] 4 5

聰明的豬
2003-11-02, 06:18 PM
各位:

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

贊助商連結


C.C.
2003-11-02, 07:49 PM
你應該先把要使用的所有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

聰明的豬
2003-11-02, 09:19 PM
有~我電路大概都確定好了!!!就是那一個圖!!!
七斷顯示計改成lcd~
再來~cd4543
再來就是at89c2051這顆改成8051!!
其他都不變!!

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

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

聰明的豬
2003-11-02, 11:47 PM
@____________@||

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

C.C.
2003-11-03, 03:18 AM
你可以在 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 副程式順便給你個顯示的範例
至於超音波部分你可能要自己研究囉!

gwochern
2003-11-03, 10:14 AM
http://www.atmel.com/dyn/products/product_card.asp?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上來問吧~~~~

聰明的豬
2003-11-03, 08:05 PM
最初由 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: 那段來作更改嗎??

聰明的豬
2003-11-03, 08:08 PM
最初由 gwochern 發表
http://www.atmel.com/dyn/products/product_card.asp?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是這顆!!!
http://www.gurubio.com/misaco5/DVC00353.JPG
http://www.gurubio.com/misaco5/DVC00354.JPG

聰明的豬
2003-11-03, 08:25 PM
我了改了!!!我大概研究一下pdf的腳位!!
再對照一下我去買的書本的資料(8051)!!!
我發現~8051跟89c2051的腳位是一樣低!!!!!!!...

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

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