📄 12864.c
字号:
今天我写了一个12864的小程序,想要它显示出汉字.结果是出来了,但本该显示在0x80的字却显示在了0x81的地方了其它的也都一样地址加一显示.
#include <c8051f020.h>
#include <string.h>
//-----------------------------------------------------------------------------
//全局变量定义
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 函数定义
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void show(unsigned char lcddata,unsigned char address);
void PORT_Init (void);
void wtdata(unsigned char wtd);
void wtcode(unsigned char wtc);
void ckbusy(void);
void lcd(void);
unsigned char i;
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void)
{
WDTCN = 0xde;
WDTCN = 0xad; //禁止看门狗定时器
SYSCLK_Init (); // 系统时钟初始化
PORT_Init (); // 交叉开关和通用I/O口初始化
lcd();
while(1)
{wtdata(0xcc);
wtdata(0xa8);
}
}
//-----------------------------------------------------------------------------
//函数名称: SYSCLK_Init ()
//函数功能: 系统时钟初始化
//入口参数: 无
//出口参数: 无
//全局变量引用: 无
//调用模块: 无
//-----------------------------------------------------------------------------
//
void SYSCLK_Init (void)
{
//unsigned char i; // delay counter
//OSCXCN = 0x67; // start external oscillator with
// 22.1184MHz crystal
//for (i=0; i < 255; i++) ; // Wait for osc. to start up
//while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
//OSCICN = 0x88;
OSCICN = 0x05; // 系统时钟初始化为片内的 24.5MHz / 8
}
//-----------------------------------------------------------------------------
//函数名称: PORT_Init ()
//函数功能: 通用I/O口及交叉开关初始化
//入口参数: 无
//出口参数: 无
//全局变量引用: 无
//调用模块: 无
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x00; // 没有选择数字外设
XBR2 = 0x40;
P74OUT = 0x0f;
// P4口设为推挽方式
}
//-----------------------------------------------------------------------------
//函数名称: LCD_Init ()
//函数功能: LCD初始化
//入口参数: 无
//出口参数: 无
//全局变量引用: 无
//调用模块: 无
//-----------------------------------------------------------------------------
void ckbusy()
{ unsigned int x;
for(x=0;x<5000;x++);
}
//
void wtcode(unsigned char wtd)
{
ckbusy();
P4=0x1c;
P5=wtd;
P4=0x18;
}
//
void wtdata(unsigned char wtc)
{
ckbusy();
P4=0x1d;
P5=wtc;
P4=0x19;
}
//
void lcd(void)
{
ckbusy();
P4&= 0Xef;
P4|=0x10; //复位
wtcode(0x3b); //功能设定,8位数据口,基本指令集
wtcode(0x3b); //功能设定,8位数据口,基本指令集
wtcode(0x0c); //显示状态开关,整体显示,光标不显示,光标位置不反白
wtcode(0x01); //清屏
wtcode(0x03); //光标回到原点
wtcode(0x06); //光标不移动,位址加一
wtcode(0x1e); //光标向右移动
// wtcode(0x45);
wtcode(0x80);
}
请高手们帮忙解决一下.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -