基于STC12C5A56S2單片機和12864字符液晶,串口程序
其實對于用過74HC595(移位寄存器)的朋友,串口方式操作12864是很容易的,這個程序已在硬件上調試通過了,顯示很穩定! 同時在此感謝親愛的,一直陪著我,默默支持我
#include< STC_NEW_8051.H> #define uint8 unsigned char #define uint16 unsigned int sbit SCLK = P0^7; //時鐘 sbit SID = P0^6; //串行數據 sbit CS = P0^5; //串行片選信號 sbit CS1 = P4^6; //PSB并串行接口選擇,H——并行,L——串行 /***************************************/ /*函數名:Delay */ /*功能:延時 */ /*參數:us---延時的微秒數 */ /* ms---延時的毫秒數 */ /*返回值:無 */ /***************************************/ void Delayus(uint8 us) { uint8 i; for(i = 0;i <= us*3; i ++); } void Delayms(uint8 ms) { uint16 i,j; for(i = 0;i < 2629; i++) for(j = 0;j < ms; j++); } /****************************************/ /*函數名:Lcd_w_bit */ /*功能:向lcd發送一個字節數據 */ /*參數:byte———要發送的數據 */ /*返回值:無 */ /****************************************/ void Lcd_w_bit(uint8 byte) { uint8 i; for(i = 0;i < 8;i ++) //循環8次發送一個字節 { SID = byte&0x80; //取byte最高位 SCLK = 1; Delayus(1); //等待端口變化 SCLK = 0; //下降沿讀入數據 byte = byte<<1; //byte左移一位 } } /****************************************/ /*函數名:Lcd_w_char() */ /*功能:發送指令/數據 */ /*參數:Nf--1,0標志位,Data--發送的數據 */ /*返回值:無 */ /****************************************/ void Lcd_w_char(uint8 Nf, uint8 Data) { uint8 Init_char,Hdata,Ldata; //定義起始選擇信號,數據/指令的高和低4位 if(Nf == 0) //Nf=0,則寫入的是控制指令 { Init_char = 0xf8; //A=0,MCU->LCD;B=0,控制指令;C=0 } else //Nf=1,則寫入的是顯示數據 { Init_char = 0xfa; //A=0,MCU->LCD;B=1,顯示數據;C=0 } Hdata = Data&0xf0; //取Data高四位 Ldata = (Data<<4)&0xf0; //取Data低四位 CS = 0; Delayus(4); CS = 1; Delayus(4); Lcd_w_bit(Init_char); //寫入起始選擇信號 Delayus(5); Lcd_w_bit(Hdata); //寫入Data高四位 Delayus(5); Lcd_w_bit(Ldata); //寫入Data低四位 Delayus(5); CS = 0; } /****************************************/ /*函數名:Lcd_w_word() */ /*功能:發送字符串 */ /*參數:str--要寫入顯示的字符串 */ /*返回值:無 */ /****************************************/ void Lcd_w_word(uint8 *str) { while(*str!='\0') { Lcd_w_char(1,*str++); } *str = 0; } /****************************************/ /*函數名:Lcd_init */ /*功能:lcd初始化 */ /*參數:無 */ /*返回值:無 */ /****************************************/ void Lcd_init() { Delayms(50); //啟動等待LCD進入工作模式 CS1 = 0; //串行工作模式 CS = 1; //片選 Lcd_w_char(0,0x01); //清屏 Delayms(1); Lcd_w_char(0,0x06); //DDRAM地址計數器(AC)歸零 Delayms(2); Lcd_w_char(0,0x30); //8 位界面,基本指令集,繪圖顯示關 Delayms(1); Lcd_w_char(0,0x0c); //顯示打開,光標關,反白關 Delayms(5); } /***************************************/ /*函數名:MCU_init */ /*功能:MCU初始化 */ /*參數:無 */ /*返回值:無 */ /***************************************/ void Mcu_init() { P0M1 = 0x00; P0M0 = 0x00; P4M1 = 0x00; P4M0 = 0X00; } /***************************************/ /*函數名:main函數 */ /*功能:main */ /*參數:無 */ /*返回值:無 */ /***************************************/ void main(void) { Mcu_init(); Lcd_init(); while(1) { Lcd_w_char(0,0x80); Lcd_w_word("Fo"); Delayms(600); Lcd_w_char(0,0x81); Lcd_w_word("re"); Delayms(600); Lcd_w_char(0,0x82); Lcd_w_word("ve"); Delayms(600); Lcd_w_char(0,0x83); Lcd_w_word("r "); Delayms(600); Lcd_w_char(0,0x84); Lcd_w_word("lo"); Delayms(600); Lcd_w_char(0,0x85); Lcd_w_word("ve"); Delayms(600); Lcd_w_char(0,0x86); Lcd_w_word("親"); Delayms(600); Lcd_w_char(0,0x90); Lcd_w_word("親"); Delayms(600); Lcd_w_char(0,0x91); Lcd_w_word(","); Delayms(600); Lcd_w_char(0,0x92); Lcd_w_word("謝"); Delayms(600); Lcd_w_char(0,0x93); Lcd_w_word("謝"); Delayms(600); Lcd_w_char(0,0x94); Lcd_w_word("你"); Delayms(600); Lcd_w_char(0,0x95); Lcd_w_word("陪"); Delayms(600); Lcd_w_char(0,0x96); Lcd_w_word("在"); Delayms(600); Lcd_w_char(0,0x97); Lcd_w_word("我"); Delayms(600); Lcd_w_char(0,0x88); Lcd_w_word("身"); Delayms(600); Lcd_w_char(0,0x89); Lcd_w_word("邊"); Delayms(600); Lcd_w_char(0,0x8a); Lcd_w_word(","); Delayms(600); Lcd_w_char(0,0x8b); Lcd_w_word("愿"); Delayms(600); Lcd_w_char(0,0x8c); Lcd_w_word("我"); Delayms(600); Lcd_w_char(0,0x8d); Lcd_w_word("們"); Delayms(600); Lcd_w_char(0,0x8e); Lcd_w_word("就"); Delayms(600); Lcd_w_char(0,0x8f); Lcd_w_word("這"); Delayms(600); Lcd_w_char(0,0x98); Lcd_w_word("樣"); Delayms(600); Lcd_w_char(0,0x99); Lcd_w_word("幸"); Delayms(600); Lcd_w_char(0,0x9a); Lcd_w_word("福"); Delayms(600); Lcd_w_char(0,0x9b); Lcd_w_word("的"); Delayms(600); Lcd_w_char(0,0x9c); Lcd_w_word("到"); Delayms(600); Lcd_w_char(0,0x9d); Lcd_w_word("永"); Delayms(600); Lcd_w_char(0,0x9e); Lcd_w_word("遠"); Delayms(600); Lcd_w_char(0,0x9f); Lcd_w_word("!"); Delayms(600); } }