單片機串行源程序如下:
#include "reg52.h"
#include //LCD1602接口定義 #define LCD_DATA P1 //P1口(P14~P17)與LCD高四位(D4~D7)對應相接 sbit LCD1602_RS=P1^2; //數據指令 sbit LCD1602_EN=P1^3; //使能 //延時函數,12mhz 6t延遲時間10*255us void LCD_init(void); void LCD_en_write(void); void LCD_write_command(unsigned char command) ; void LCD_write_data(unsigned char Recdata); void LCD_set_xy (unsigned char x, unsigned char y); void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); void LCD_write_char(unsigned char X,unsigned char Y,unsigned char Recdata); void delay_nus(unsigned int n); void delay_nms(unsigned int n); //以下函數用于輸出字符串和數字 int LCD_PutNum(unsigned long num,int XS,int pos); int LCD_PutStr(unsigned char *DData,int pos); //-------------------------1us延時函數--------------------------------- void delay_1us(void) { _nop_(); } //------------------------N us延時函數--------------------------------- void delay_nus(unsigned int n) { unsigned int i=0; for (i=0;i } //-----------------------1ms延時函數---------------------------------- void delay_1ms(void) { unsigned int i; for (i=0;i<1140;i++); } //-----------------------N ms延時函數--------------------------------- void delay_nms(unsigned int n) { unsigned int i=0; for (i=0;i } //------------------------液晶初始化----------------------------------- void LCD_init(void) { LCD_write_command(0x28); delay_nus(40); LCD_write_command(0x28); delay_nus(40); LCD_write_command(0x28); delay_nus(40); LCD_en_write(); delay_nus(40); LCD_write_command(0x28); //4位顯示 LCD_write_command(0x0c); //顯示開 LCD_write_command(0x01); //清屏 delay_nms(2); } //----------------------液晶使能函數------------------------------------- void LCD_en_write(void) LCD1602_EN=1; delay_nus(1); LCD1602_EN=0; } //------------------------寫指令函數-------------------------------------- void LCD_write_command(unsigned char command) { delay_nus(16); LCD1602_RS=0; //RS=0 LCD_DATA &=0X0f; //清高四位 LCD_DATA|=command&0xf0; //寫高四位 LCD_en_write(); command=command<<4; //低四位移到高四位 LCD_DATA&=0x0f; //清高四位 LCD_DATA|=command&0xf0; //寫低四位 LCD_en_write(); } //------------------------寫數據函數-------------------------------------- void LCD_write_data(unsigned char Recdata) { delay_nus(16); LCD1602_RS=1; //RS=1 LCD_DATA&=0X0f; //清高四位 LCD_DATA|=Recdata&0xf0; //寫高四位 LCD_en_write(); Recdata=Recdata<<4; //低四位移到高四位 LCD_DATA&=0X0f; //清高四位 LCD_DATA|=Recdata&0xf0; //寫低四位 LCD_en_write(); } //-----------------------地址定位函數------------------------------------- void LCD_set_xy( unsigned char x, unsigned char y ) { unsigned char address; if (y == 0) address = 0x80 + x; else address = 0xc0 + x; LCD_write_command(address); } //----------------------在某個地址處,寫一個字符---------------------------- void LCD_write_char(unsigned char X,unsigned char Y,unsigned char Recdata) //列x=0~15,行y=0,1 { LCD_set_xy(X, Y); //寫地址 LCD_write_data(Recdata); } //----------------------------輸出字符串------------------------------------- int LCD_PutStr(unsigned char *DData,int pos) //pos表示字符顯示位置,0~31 { unsigned char i; if(pos==-1) { LCD_write_command(0x01); //清屏 delay_nms(2); pos=0; } while((*DData)!='
主站蜘蛛池模板:
奉节县|
连南|
天柱县|
叙永县|
油尖旺区|
武冈市|
阿瓦提县|
福鼎市|
嘉鱼县|
玉门市|
曲水县|
新宾|
通州区|
宜兰市|
白朗县|
来宾市|
博白县|
鄄城县|
宁安市|
和顺县|
珠海市|
营口市|
滦平县|
儋州市|
安庆市|
察雅县|
横峰县|
客服|
公安县|
交口县|
珠海市|
广南县|
麻江县|
灵丘县|
漠河县|
康平县|
玉林市|
台北县|
宜良县|
班玛县|
嘉黎县|