📄 12232.c
字号:
// CA12864K 测试程序(串口)
//***************************************************************************
//连线表: CPU=89C52 SystemClock=12Mhz *
//CS=P3.0 SCLK=P3.1 SID=P3.2 Reset=RC in Board *
//***************************************************************************
#include "stc89c52.h"
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#include "12232.h"
sbit CS =P3^4;
sbit SID=P3^5;
sbit SCK=P3^3;
sbit Key=P3^3;
unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
};
//串口发送一个字节
void SendByte(unsigned char Dbyte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCK = 0;
Dbyte=Dbyte<<1; //左移一位
SID = CY; //移出的位给SID
SCK = 1;
SCK = 0;
}
}
//串口接收一个字节
//仅在读取数据的时候用到
//而读出的数据是一次只能读出4bit的
unsigned char ReceiveByte(void)
{
unsigned char i,temp1,temp2;
temp1=temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
SCK = 0;
SCK = 1;
SCK = 0;
if(SID) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
SCK = 0;
SCK = 1;
SCK = 0;
if(SID) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}
void CheckBusy( void )
{
do SendByte(0xfc); //11111,RW(1),RS(0),0
while(0x80&ReceiveByte()); //BF(.7)=1 Busy
}
void WriteCommand( unsigned char Cbyte )
{
CS = 1;
CheckBusy();
SendByte(0xf8); //11111,RW(0),RS(0),0
SendByte(0xf0&Cbyte); //高四位
SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)
CS = 0;
}
void WriteData( unsigned char Dbyte )
{
CS = 1;
CheckBusy();
SendByte(0xfa); //11111,RW(0),RS(1),0
SendByte(0xf0&Dbyte); //高四位
SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)
CS = 0;
}
extern void Delay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0) //for 12M
{ usn = 2;
while(usn!=0)
{
us=0xf5;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void LcmInit( void )
{
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x03); //AC归0,不改变DDRAM内容
WriteCommand(0x0C); //显示ON,游标OFF,游标位反白OFF
WriteCommand(0x01); //清屏,AC归0
WriteCommand(0x06); //写入时,游标右移动
}
//文本区清RAM函数
extern void LcmClearTXT( void )
{
unsigned char i;
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x80); //AC归起始位
for(i=0;i<64;i++)
WriteData(0x20);
}
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(AC_TABLE[8*row+col]); //起始位置
while(*puts != '\0') //判断字符串是否显示完毕
{
if(col==8) //判断换行
{ //若不判断,则自动从第一行到第三行
col=0;
row++;
}
if(row==2) row=0; //一屏显示完,回到屏左上角
WriteCommand(AC_TABLE[8*row+col]);
WriteData(*puts); //一个汉字要写两次
puts++;
WriteData(*puts);
puts++;
col++;
}
}
extern void DisplayLCD(unsigned char *ch1,unsigned char *ch2)
{
LcmClearTXT();
Delay(200);
PutStr(0,0,ch1);
PutStr(1,0,ch2);
Delay(2000);
}
extern void DisplayMENU(unsigned char *ch1,unsigned char *ch2)
{
LcmClearTXT();
Delay(100);
PutStr(0,0,ch1);
PutStr(1,0,ch2);
Delay(100);
}
extern void DisplayNow(unsigned char *ch1,unsigned char *ch2)
{
PutStr(0,0,ch1);
PutStr(1,0,ch2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -