| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
貼一個LCD通訊的程序-標(biāo)準(zhǔn)接口 | 
  
| 作者:wanglele 欄目:單片機(jī) | 
//LCD顯示,接口控制,串行通訊 ,PA7-DE,PA6-~RE,返回的數(shù)據(jù)是發(fā)送的數(shù)據(jù) //LCD的PB0~PB7(7~14腳)接8515的PC0~PC7,E-PB7,RS-PB6,R/W-PB5 #include "io8515v.h" //#include "macros.h" //#include "stdio.h" // simple helper macros' #define LCD_E (1 << 7) #define LCD_RS (1 << 6) #define LCD_RW (1 << 5) #define lcd_set_e() (PORTB |= LCD_E) #define lcd_set_rs() (PORTB |= LCD_RS) #define lcd_set_rw() (PORTB |= LCD_RW) #define lcd_clear_e() (PORTB &= ~LCD_E) #define lcd_clear_rs() (PORTB &= ~LCD_RS) #define lcd_clear_rw() (PORTB &= ~LCD_RW) void delay(unsigned int t); //time delay void init_uart(void); //UART and LCD initialize unsigned CHAR rece_byte( void ); //rececive bytes void trans_byte(unsigned CHAR d); //transimit bytes void lcd_pulse(void); putCHAR(CHAR c); //OUTPUT signal CHARachter void outtext(CHAR* text); //OUTPUT string void lcd_send(unsigned CHAR data); //LCD send data void clrscr(void); //clear screen void second_display(unsigned CHAR TEMP); /**************************** 延 遲 函 數(shù) ****************************/ void delay(unsigned int t) { while(t--); } /***************************** 串口和LCD初始化 ******************************/ void init_uart(void) { UBRR=0X8F; //設(shè)置波特率BAUD=4800 UCR = BIT(RXEN) | BIT(TXEN); //接收使能/發(fā)送使能 DDRC=0XFF; DDRB |= (LCD_E | LCD_RS | LCD_RW); lcd_clear_rs(); lcd_clear_rw(); lcd_send(0x38); //8位數(shù)據(jù)線,2行顯示, lcd_send(0x06); //AC加1,S=0顯示不移位 lcd_send(0x0e); //開顯示,光標(biāo)顯示,閃耀開 } /***************************** 發(fā)送數(shù)據(jù)函數(shù) ******************************/ void trans_byte(unsigned CHAR d) { DDRA=0XFF; PORTA=0XFF; while ( !(USR & (1<<UDRE)) ) ; /* wait for empty transmit buffer */ UDR = d; /* start transmittion */ while(!(USR&0x40)) ; /*判斷TXC是否發(fā)完*/ USR|=0x40; //關(guān)TXC PORTA=0X00; } /****************************** 接收數(shù)據(jù)函數(shù) *******************************/ unsigned CHAR rece_byte( void ) { unsigned CHAR TEMP0; DDRA=0XFF; PORTA=0X00; while ( !(USR & (1<<RXC)) ) /* wait for incomming data */ ; TEMP0=UDR; second_display(TEMP0); return UDR; /* return the data */ // clrscr(); // lcd_send(0x38); //8位數(shù)據(jù)線,2行顯示, // lcd_send(0x06); //AC加1,S=0顯示不移位 // lcd_send(0x0e); //開顯示,光標(biāo)顯示,閃耀開 // outtext("receiving"); } /***************************** LCD *****************************/ // lcd strobe void lcd_pulse(void) { lcd_set_e(); //write delay(4); lcd_clear_e(); //read delay(4); } // OUTPUT SINGLE CHARacter putCHAR(CHAR c) { lcd_clear_rw(); //data regesiter write(DR) lcd_set_rs(); lcd_send(c); } // OUTPUT string void outtext(CHAR* text) { unsigned CHAR i; for(i = 0; text[i] && i < 16; i++) putCHAR(text[i]); } // send byte to lcd void lcd_send(unsigned CHAR data) { delay(800); //加快顯示速度 PORTC = data; lcd_pulse(); } // clear screen void clrscr(void) { lcd_clear_rs(); lcd_clear_rw(); lcd_send(0x01); delay(1500); } //顯示第2行 void second_display(unsigned CHAR TEMP) { lcd_clear_rs(); lcd_clear_rw(); lcd_send(0xc0); //第2行地址 lcd_send(0x06); putCHAR('0'+TEMP/16); putCHAR('0'+TEMP%16); } /*************************** 主 函 數(shù) ****************************/ void main(void) { DDRA=0XFF; PORTA=0X00; clrscr(); init_uart(); outtext("ready receiving"); while(1) { trans_byte(rece_byte()); } }  | 
  
  | 
    
 
  | 
  
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |