lcd12864串口通信

更新时间:2023-12-26 04:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include \

#define E (1<<8) #define RW (1<<9) #define RS (1<<10) #define CS2 (1<<11) #define CS1 (1<<12)

/********************************************************************** *函数名称:DelayNS() *函数功能:长软件延时 *入口参数 dly:延时值

*********************************************************************/ void DelayNS(uint32 diy) {

uint32 i;

for(;dly>0;dly--) for(i=0;i<50;i++) }

/**************************************************************** *函数名称:Left() *函数功能:左半屏

*****************************************************************/ void Letf() {

IO0CLR=CS1; IO0SET=CS2; //CS1=0;CS2=1 }

/************************************************************* *函数名称:Right() *函数功能:右半屏

***************************************************************/ void Right() {

IO0CLR=CS2; IO0SET=CS1; //CS1=1;CS2=0 }

/************************************************************ *函数名称:SelectScreen() *函数功能:左、右半屏选择

*入口参数 screen=1 选择右半屏,screen=0 选择左半屏

***********************************************************/ void SelectScreen(uint8 screen)

{

switch(screen) { case 1: Right(); break; //右屏 case 2: Left(); break; //左屏 default: break; } }

/*************************************************************** *函数名称:ChekBusy() *函数功能:查忙状态

***************************************************************/ void ChekBusy(void) {

uint32 state;

PINSEL0=0x00000000; IO0DIR=0x1fff; IO0CLR=RS; IO0SET=RW; do{

IO0DIR=0x1fff; IO0CLR=0xff; IO0SET=E; IO0DIR=0x1f00; state=IO0PIN; IO0CLR=E; }while(0x80&state); IO0DIR=0x1fff; }

/************************************************************ *函数名称:Wr_COM() *函数功能:写命令

*入口参数:wdate 待写入的命令

*************************************************************/ void Wr_COM(uint8 wdate) {

ChekBusy(); IO0CLR=RW; IO0CLR=RS;

IO0SET=wdate; //写入命令 IO0SET=E; IO0CLR=E; DelayNS(1); IO0SET=E; }

/************************************************************ *函数名称:Wr_Dat() *函数功能:写数据

*入口参数:wdate 待写入数据

************************************************************/ void Wr_Dat(uint8 wdate) {

ChekBusy(); IO0CLR=RW; IO0SET=RS;

IO0SET=wdate; //写数据 IO0SET=E; IO0CLR=E; DelayNS(1); IO0SET=E; }

/******************************************************** *函数名称:SetLine()

*函数功能:设定行(页) *入口参数:line 行(页),0<=line<=7

*********************************************************/ void SetLine(uint8 line) {

line&=0xo7; line|=0xb8; Wr_COM(line); }

/******************************************************* *函数名称:SetColumn() *函数功能:设定列

*入口参数:column 列号,0=

*******************************************************/ void SetColumn(uint8 column) {

column&=0x3f;

column|=0x40; Wr_COM(column); }

/****************************************************** *函数名称:LCD_init() *函数功能:LCD初始化

******************************************************/ void LCD_init(void) {

uint8 i,j; Left();

Wr_COM(0x3f); //开显示 Right();

Wr_COM(0x3f); Left(); //左半屏 for(i=0;i<8;i++) {

Wr_COM(0xb8|i); //设置页地址 Wr_COM(0x40|0x00); //设置列地址 for(j=0;j<8;j++) { Wr_COM(0x00); } }

Right(); //右半屏 for(i=0;i<8;i++) {

Wr_COM(0xb8|i); //设置页地址 Wr_COM(0x40|0x00); //设置列地址 for(j=0;j<8;j++) { Wr_COM(0x00); } } }

/***************************************************** *函数名称:display_word() *函数功能:显示一个汉字

*入口参数:page 页地址,row 列地址,*P汉字数组指针 ****************************************************/ void display_word(uint8 page,uint8 row,uint8 *p) {

uint8 i;

Wr_COM(0xb8|page); //设置页地址 Wr_COM(0x40|row); //设置列地址

for(i=0;i<16;i++) //16*16汉字,先写上半部分 {

Wr_Dat(*p); p++; }

Wr_COM(0xb8|page+1); //页地址加1 Wr_COM(0x40|row); //设置列地址 for(i=0;i<16;i++) {

Wr_Dat(*p); p++; //写下半部分 } }

#include \#include \#include #include \

int main(void) {

LCD_init(); Left(); //显示汉字 display_word(6,0,dan);

display_word(6,16,dan+32); display_word(6,32,dan+64); display_word(6,64,dan+96); Right();

display_word(6,64,dan+128); display_word(6,80,dan+160); display_word(6,96,dan+192); display_word(6,112,dan+224); }

本文来源:https://www.bwwdw.com/article/kh9x.html

Top