單片機串行源程序如下:
#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)!='
主站蜘蛛池模板:
双江|
绩溪县|
西华县|
忻城县|
富平县|
马边|
门头沟区|
淳安县|
海林市|
垣曲县|
阿勒泰市|
泸定县|
罗山县|
明水县|
微博|
东乡族自治县|
武汉市|
南京市|
嘉黎县|
临猗县|
宁明县|
尖扎县|
射阳县|
乐山市|
化德县|
宜城市|
弥勒县|
衢州市|
綦江县|
屯门区|
静乐县|
安新县|
平陆县|
建宁县|
乐陵市|
汕尾市|
思茅市|
鄯善县|
和政县|
满城县|
哈密市|