基于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);
}
}
