LCD1602 -- STC

来源:互联网 发布:流体动力学软件 编辑:程序博客网 时间:2024/06/05 19:23
#include "reg51.h"
#include "intrins.h"
#include <string.h>

typedef unsigned char BYTE;
typedef unsigned int WORD;

/********************************************************************************************/
/********************************************************************************************
// 引脚定义 // (使用者根据实际更改)
/********************************************************************************************/
#define DB0_DB7 P0
sbit LCD1602_RS = P2^4;
sbit LCD1602_RW = P2^5;
sbit LCD1602_E = P2^6;

BYTE i;
BYTE code table1[] = {" aaaaaaa"};

BYTE code table2[] = {" bbbbbbb!"};


#define         LCD1602_set                   0x38                                // 8位总线_2行显示
#define         LCD1602_light                 0x0c                                // 开显示_关光标_关光标闪烁
#define         LCD1602_add                   0x06                                // 读入后AC(指针)加1,向右写
#define         LCD1602_sub                   0x04                                // 读入后AC(指针)减1,向左写
#define         LCD1602_clear             0x01                                // 清除屏幕
#define         LCD1602_CMD_back          0x02               // DDRAM回零位
#define FOSC 12000000L      //System frequency

void delay(BYTE z) //@12.000MHz  延时1MS
{
BYTE i, j;

while(z--)

{

i = 12;

j = 169;

do

{

while (--j);

} while (--i);

}

}

/********************************************************************************************
// 写指令程序 //
// 向LCD1602写命令 本函数需要1个指令集的入口参数 //
/********************************************************************************************/
void LCD1602_WriteCMD(WORD command){
        DB0_DB7  = command;
        LCD1602_RS = 0;
        LCD1602_RW = 0;
                delay(5);
        LCD1602_E = 1;
                delay(5);
        LCD1602_E = 0;        
}


/********************************************************************************************
// 写数据程序 //
// 向LCD1602写数据 //
/********************************************************************************************/
void LCD1602_WriteData(WORD dat){
        DB0_DB7 = dat;
        LCD1602_RS = 1;
        LCD1602_RW = 0;
                delay(5);
        LCD1602_E = 1;
                delay(5);
        LCD1602_E = 0;
}
/********************************************************************************************
// LCD1602初始化 //(使用者可自定义,加 * 号程序行必须保留但可修改)
/********************************************************************************************/
void LCD1602_Init(){
        LCD1602_E = 0;
        LCD1602_WriteCMD(LCD1602_set);                        //* 显示模式设置:显示2行,每个字符为5*7个像素
        LCD1602_WriteCMD(LCD1602_clear);                //  显示清屏
        LCD1602_WriteCMD(LCD1602_CMD_back);                //* 数据指针指向第1行第1个字符位置
        LCD1602_WriteCMD(LCD1602_add);                        //  显示光标移动设置:文字不动,光标右移
        LCD1602_WriteCMD(LCD1602_light);                //  显示开及光标设置:显示开,光标开,闪烁开
        
}
/********************************************************************************************
// LCD1602显示程序
//调用LCD1602_Display();
/********************************************************************************************/
void LCD1602_Display(void){


        LCD1602_WriteCMD(0x80);                                    //写指令第一行显示
                for(i=0;i<16;i++){
                        LCD1602_WriteData(table1[i]);delay(5);//写第一行显示数据
                }


        LCD1602_WriteCMD(0x80+0x40);                  //写指令第二行显示
                for(i=0;i<14;i++){
                        LCD1602_WriteData(table2[i]);delay(5);          //写第一行显示数据
        }
        
}
/********************************************************************************************
//主程序
/********************************************************************************************/


void Delay500ms() //@12.000MHz
{
BYTE i, j, k;


_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}


void main()

{

Delay500ms();
        LCD1602_Init();                        // LCD1602初始化
LCD1602_Display();                // LCD1602显示程序
        while(1);
}




0 0
原创粉丝点击