专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

晒个12864程序

作者:李纽   来源:本站原创   点击数:  更新时间:2010年06月11日   【字体:

  基于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);
 } 
}
关闭窗口

相关文章