聰明的豬
2003-11-02, 06:18 PM
各位:
嗯∼我知道的好像是!我要換的那顆他跟8051是同樣的內容!
好像頂多只是腳位的不同而已!!
贊助商連結
嗯∼我知道的好像是!我要換的那顆他跟8051是同樣的內容!
好像頂多只是腳位的不同而已!!
贊助商連結
贊助商連結 聰明的豬 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 部分). |
|