QC12864液晶屏串行時(shí)序驅動(dòng)程序解
串行時(shí)序不能讀操作的情況下可繪制任意函數曲線(xiàn)
//程序格式粗糙,無(wú)暇整理,若參考有疑問(wèn)請留言
完整的源代碼下載:http://www.51hei.com/f/12864c5.rar
//12864串行時(shí)序的實(shí)現///**************************************/#includereg51.h>#includeintrins.h>#includemath.h> /**************************************/#define uchar unsigned char#define uint unsigned int #define clear 0x01 //清屏#define reset_DDRAM 0x02 //DDRAM地址歸位#define left_move 0x04 //游標左移#define right_move 0x06 //游標右移#define all_left_move 0x05 //畫(huà)面整體左移#define all_right_move 0x07 //畫(huà)面整體右移#define display_left_move 0x10 //顯示游標左移#define display_right_move 0x14 //顯示游標右移#define set_function1 0x30 //基本指令集動(dòng)作#define set_CGRAM 0x40 //設定CGRAM地址#define set_DDRAM 0x80 //設定DDRAM地址#define set_function2 0x34 //擴充指令集動(dòng)作#define fanbai 0x04 //反白第一行(擴充指令集)#define set_GDRAM 0x80 //設定GDRAM地址(擴充指令集)#define ON_G 0x36 //開(kāi)繪圖顯示(擴充指令集)#define set_function2 0x34 //關(guān)繪圖顯示(擴充指令集)//端口定義sbit LCD_CS=P1^3;sbit LCD_SID=P1^1; //串行數據線(xiàn)sbit LCD_SCLK=P1^2; //串上時(shí)鐘輸入uchar code a[]={"QC12864"}; //定義要顯示的字符串/**************************************///延時(shí)函數/**************************************/void Delay_nms(uchar n){uchar i;uchar j;for(i=0;in;i++)for(j=0;j125;j++) //大概1ms_nop_();}/**************************************///串行發(fā)送一個(gè)字節/**************************************/void LCD_sendbyte(uchar byte){uchar i;for(i=0;i8;i++){LCD_SCLK=0; //拉低時(shí)鐘線(xiàn)_nop_();LCD_SID=(bit)(byte0x80); //發(fā)送最高位數據LCD_SCLK=1; //上升沿發(fā)送數據byte=byte1; //左移一位}}/****************************************///寫(xiě)指令/****************************************/void LCD_write_com(uchar com){LCD_CS=1; LCD_sendbyte(0xf8); //送入5個(gè)連續的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(0),0LCD_sendbyte(0xf0com); //取高四位,數據分兩次傳送,//每個(gè)字節的內容被送入兩個(gè)字節//高四位放在第一個(gè)字節的高四位LCD_sendbyte(0xf0(com4)); //低四位放在第二個(gè)字節的高四位 LCD_CS=0; Delay_nms(10); //串行不支持讀操作,不可檢測忙操作,這里用延時(shí)替代 }/******************************************///寫(xiě)數據/******************************************/void LCD_write_dat(uchar dat){LCD_CS=1; LCD_sendbyte(0xfa); //送入5個(gè)連續的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(1),0LCD_sendbyte(0xf0dat); //取高四位,數據分兩次傳送,//每個(gè)字節的內容被送入兩個(gè)字節//高四位放在第一個(gè)字節的高四位LCD_sendbyte(0xf0(dat4)); //低四位放在第二個(gè)字節LCD_CS=0; Delay_nms(10);}/********************************************///LCD初始化/********************************************/void LCD_init(void){ LCD_write_com(0x30); //選擇基本指令集 LCD_write_com(0x0c); //開(kāi)顯示,無(wú)游標,不反白LCD_write_com(0x01); //清除顯示屏幕,把DDRAM位址計數器調整為00HDelay_nms(5); //清屏操作時(shí)間較長(cháng)1.6ms 因此加此延時(shí)LCD_write_com(0x02); //清DDRAM位址歸位,此處貌似與清屏重復LCD_write_com(0x06); //設定光標右移,整體顯示不移動(dòng)}/*************************************************///顯示字符串/*************************************************/void print(uchar *s){ while(*s!='国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放