这个问题有两种回答:
1,你问的不对。你其实想问的是,怎么使用串口,修改12864屏幕上的内容。这个网上有很多程序。随便看一下就好。
2,你沉迷于技术了。模拟本身提供的是八位的输出,你偏偏要自己用UART串口去驱动。这就好比:是要用到PWM的时候,明明单片机内部已经有了集成的模块。配置定时器就可以输出完美的PWM。可你觉得,这样太简单了。于是,你用两个定时器去实现:一个定时,一个控制输出频率。
效果不好还不错,而且浪费资源。
再举个极端的例子,你想实现一个很简单的for循环,使用高级的语言(就C语言来说,一下就好),
但是,你偏偏要用二进制0,1来写。
你觉得,这样才牛B,你才是比较厉害的人。
--------------------------------
喜欢请点赞,不喜欢,另说
你好很简单的,我先给你一个绘图的程序,其中函数picture()就是一个点一个点画上去的:
然后画点主要是要了解LCD12864的绘图工作原理
它先从(0x80+0)行开始(最左上角的点),然后每一行一共16字节,每一次写2字节,8次写完一行,写行的地址指针自动加1,手动换行,你只需要把上半屏写64次,下半屏写64次,就能画图了。
如果单就一个点,你可以这样:
void drew()
{
write_com(0x34);write_com(0x36);
write_com(0x80+0);write_com(0x80);
write_data(0x80);//第一行第一个点
write_com(0x80+0);write_com(0x88);
write_data(0x80);//第二屏第一行第一个点
}
函数同我程序中的picture(),只要看懂这个函数想画什么都没问题。
不懂的随时回复我。
希望我的回答能帮助到你。
//如果只是要话一个点的话简单,这里是个串口程序
#include <reg52h>
#include <intrinsh>
#define uchar unsigned char
#define uint unsigned int
/LCD接口定义/
sbit SID = P1^0; //串行数据
sbit SCLK = P1^1; //串行同步时钟
/汉字地址表/
uchar code addr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
/n(ms)延时子程序/
void delayms(uint t) //约延时n(ms)
{
uint i;
while(t--)
{
for(i=0;i<125;i++);
}
}
/串行发送一个字节/
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i<8;i++)
{
SCLK = 0;
Dbyte=Dbyte<<1; //左移一位
SID = CY; //移出的位给SID
SCLK = 1;
SCLK = 0;
}
}
/写指令/
void Lcd_WriteCmd(uchar Cbyte )
{
//delayms(1);
SendByte(0xf8); //11111,RW(0),RS(0),0
SendByte(0xf0&Cbyte); //高四位
SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)
}
/写数据/
void Lcd_WriteData(uchar Dbyte )
{
//delayms(1);
SendByte(0xfa); //11111,RW(0),RS(1),0
SendByte(0xf0&Dbyte); //高四位
SendByte(0xf0&Dbyte<<4); //低四位(先执行<<)
}
/初始化LCD/
void Lcd_Init(void)
{
delayms(3);
Lcd_WriteCmd(0x30); //选择基本指令集
delayms(1);
Lcd_WriteCmd(0x30); //选择8bit数据流
delayms(1);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delayms(1);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delayms(2);
}
void pic_Disp(uchar x,uchar y) //显示一个点
{
Lcd_WriteCmd(0x34); //切换到扩充指令,
Lcd_WriteCmd(0x34);//关闭图形显示
Lcd_WriteCmd(0x80+y); //行地址
Lcd_WriteCmd(0x80+x); //列地址,如果是下半屏这里多加8
Lcd_WriteData(0); //写数据 D15-D8
Lcd_WriteData(1); //写数据 D7-D0
Lcd_WriteCmd(0x36);//打开图形显示
}
void main()
{
Lcd_Init();
pic_Disp(1,1);
while(1);
}
给你测试了,行可行
以上就是关于12864使用串口通信,驱动程序怎么写全部的内容,包括:12864使用串口通信,驱动程序怎么写、求用12864画点、线的c语言并行单片机程序。、求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)