|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有玩MEGA128的嗎?能否給我一個(gè)LCD的程序. |
| 作者:synario 欄目:單片機(jī) |
請(qǐng)大蝦幫忙,我用總線方式連接.試驗(yàn)了曉奇的源代碼.弄了半天都不行. |
| 2樓: | >>參與討論 |
| 作者: shenjiangu 于 2004/2/23 16:53:00 發(fā)布:
這個(gè)有用嗎? /********************************************* This program was produced by the CodeWizardAVR V1.24.1 STANDARD Automatic Program Generator ?COPYRIGHT 1998-2003 HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:office@hpinfotech.ro Project : Version : Date : 2004-2-7 Author : Shen Jianguo Company : Comments: Chip type : MEGA128.html">ATMEGA128 Clock frequency : 8.000000 MHz MEMORY MODEL : Small External SRAM size : 0 Data Stack size : 128 *********************************************/ #include <mega128.h> #include <delay.h> //******************************************** //SSC12J64中文LCD屏,帶中文字庫(kù) //聯(lián)接: LCD MEGA128 // RS ----- PORTC.0 // RD ----- PORTC.1 // EN ----- PORTC.2 // DB4 ----- PORTC.4 // DB5 ----- PORTC.5 // DB6 ----- PORTC.6 // DB7 ----- PORTC.7 //******************************************** #define LCD_RS PORTC.0 #define LCD_RD PORTC.1 #define LCD_EN PORTC.2 #define LCD_DB PORTC // Declare your GLOBAL variables here CHAR FLASH *str="Hello!"; CHAR FLASH *str2="將數(shù)據(jù)輸出到LCD接口,LCD數(shù)據(jù)口寬度為4bit"; //******************************************** //將數(shù)據(jù)輸出到LCD接口,LCD數(shù)據(jù)口寬度為4bit //rs: 1 操作指令寄存器,0 操作數(shù)據(jù)寄存器 //rd: 1 從LCD讀出數(shù)據(jù), 0 向LCD寫(xiě)數(shù)據(jù) //db: 要寫(xiě)入的數(shù)據(jù),僅底4位有效 //******************************************** void lcd_setport(CHAR rs,CHAR rd,CHAR db) { db=db<<4; LCD_RS=rs; LCD_RD=rd; delay_us(1); LCD_EN=1; delay_us(1); LCD_DB=LCD_DB&0x0F; LCD_DB=LCD_DB|db; delay_us(2); LCD_EN=0; delay_us(10); } //******************************************** //LCD功能設(shè)定,LCD數(shù)據(jù)口寬度為4bit //re: 1擴(kuò)展指令, 0 基本指令 //******************************************** void lcd_function_set(CHAR re) { CHAR db; db=db|(re<<2); lcd_setport(0,0,0x02); lcd_setport(0,0,db); } //******************************************** // LCD軟件復(fù)位 //******************************************** void lcd_reset(void) { lcd_setport(0,0,0x03); delay_ms(5); lcd_setport(0,0,0x03); delay_ms(1); lcd_setport(0,0,0x03); lcd_setport(0,0,0x03); lcd_function_set(0); //使用LCD基本指令 } //********************************************** //LCD開(kāi)關(guān)設(shè)定 //DISPLAY: 1 顯示開(kāi), 0 顯示關(guān) //cursor: 1 光標(biāo)開(kāi), 0 光標(biāo)關(guān) //blink: 1 光標(biāo)處字符閃動(dòng)開(kāi), 光標(biāo)處字符閃動(dòng)關(guān) //********************************************** void lcd_on_off(CHAR DISPLAY,CHAR cursor,CHAR blink) { CHAR db; db=0x08|(DISPLAY<<2)|(cursor<<1)|blink; lcd_setport(0,0,0x00); lcd_setport(0,0,db); } //********************************************** //LCD 清屏 //********************************************** void lcd_clear(void) { lcd_setport(0,0,0x00); lcd_setport(0,0,0x01); delay_ms(5); } //********************************************** //LCD顯示回原點(diǎn),設(shè)DDRAM地址為0,DDRAM內(nèi)容不變 //********************************************** void lcd_return_home(void) { lcd_setport(0,0,0x00); lcd_setport(0,0,0x02); } //********************************************** //輸入方式設(shè)定,設(shè)定光標(biāo)移動(dòng)方向并指定整體是否移動(dòng) //id :1 增量方式, 0 減量方式 //s: 1 寫(xiě)入后整體移動(dòng),0 不移動(dòng) //********************************************** void lcd_entry_mode(CHAR id,CHAR s) { CHAR db; db=0x04|(id<<1)|s; lcd_setport(0,0,0x00); lcd_setport(0,0,db); } //********************************************** //移動(dòng)光標(biāo)或整體 //s_c: 1 整體顯示移位,0 光標(biāo)移動(dòng) //r_l: 1 左移, 0 右移 //********************************************** void lcd_cour_disp_shift(CHAR s_c,CHAR r_l) { CHAR db; db=db|(s_c<<3)|(r_l<<2); lcd_setport(0,0,0x01); lcd_setport(0,0,db); } //********************************************** //讀取當(dāng)前顯示位置 //********************************************** CHAR lcd_read_address(void) { CHAR address,address_l; LCD_EN=0; LCD_RS=0; delay_us(1); LCD_RD=1; delay_us(1); LCD_EN=1; DDRC=0x07; delay_us(1); address=PINC&0x70; LCD_EN=0; delay_us(1); LCD_EN=1; delay_us(1); address_l=PINC&0xF0; address_l= address_l>>4; address=address|address_l|0x80; LCD_EN=0; LCD_RD=0; PORTC=0x00; DDRC=0xFF; return address; } //********************************************** //設(shè)定CGRAM地址 //********************************************** void lcd_set_cgram_address(CHAR address) { CHAR db; db=0x04|(address>>4); lcd_setport(0,0,db); db=address; lcd_setport(0,0,db); } //********************************************** //設(shè)定DDRAM地址 //********************************************* void lcd_set_ddram_address(CHAR address) { CHAR db; db=(0x08|(address>>4))&0x0B; lcd_setport(0,0,db); db=address; lcd_setport(0,0,db); } //********************************************** //寫(xiě)數(shù)據(jù)到CGRAM 或DDRAM //********************************************** void lcd_write_ram(CHAR data) { CHAR db; db=data>>4; lcd_setport(1,0,db); lcd_setport(1,0,data); } //********************************************** //LCD初始化 //********************************************** void lcd_inital(void) { lcd_reset(); lcd_setport(0,0,0x02); lcd_on_off(1,1,0); lcd_clear(); lcd_entry_mode(1,0); delay_ms(5); } //********************************************** //設(shè)定顯示位置 // x 列位置,范圍1-8 // y 行位置,范圍1-4 //********************************************** void lcd_gotoxy(CHAR x,CHAR y) { CHAR address; SWITCH ( y ) { case 1: address=0x80+x-1; break; case 2: address=0x90+x-1; break; case 3: address=0x88+x-1; break; case 4: address=0x98+x-1; break; default: break; } &nb |
|
| 3樓: | >>參與討論 |
| 作者: synario 于 2004/2/23 21:18:00 發(fā)布:
多謝這位大哥,我用的是T6963,不知道該怎么設(shè)置CPU 不知道哪些CPU寄存器需要設(shè)置.該怎么設(shè)置 |
|
| 4樓: | >>參與討論 |
| 作者: zlei 于 2004/2/24 9:50:00 發(fā)布:
我給你傳一個(gè),我放曉奇那里了 http://www.xiao-qi.com/comm/project_43.zip |
|
| 5樓: | >>參與討論 |
| 作者: synario 于 2004/2/25 23:15:00 發(fā)布:
基本搞定了.多謝2位大哥,還有曉奇大哥 修正了硬件錯(cuò)誤,在曉奇提供的程序基礎(chǔ)上作了修改. 現(xiàn)在可以顯示DEMO 畫(huà)面了. |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |