/********************************************************************
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
液晶上的R9。R10决定液晶的串行或者并行通讯方式。
***********************************************************************/
#include //声明库
#define uchar unsigned char
#define uint unsigned int
//CS=P1^5; //片选信号
//SID=P1^6; //数据信号
//SCLK=P1^7; //时钟信号
//RST=P1^2; //复位信号
//CH = P1^4; //并行、串行选择信号
/********************************************************************
* 名称 : delay()
*
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
P1OUT |=BIT6;//SID=1
}
else
{
P1OUT &=~BIT6;
}
P1OUT &=~BIT7;//SCLK = 0;
P1OUT |=BIT7;//SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
P1OUT |=BIT5;//CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口数据
* 输入 : Dispdata
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
P1OUT |=BIT5;//CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
P1OUT &=~BIT2;//RST = 0;
delay(100);
P1OUT |=BIT2;//RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(char *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis("5555");
write_com(0x91);
hzkdis("");
write_com(0x89);
hzkdis("");
write_com(0x98);
hzkdis("");
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关掉看门狗
P1DIR =0xFF;
P1OUT &=~BIT4;//CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
测试成功,目前想做数字示波器 液晶调好了 ad死活调不好.....
用ad采集128个二进制数 存成一个数组显示在12864上 数组怎么弄。。
/********************************************************************
* 名称 : delay()
*
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i for(j=0; j<10; j++);
}
/********************************************************************
不完整阿
楼主 我的LCD12864貌似 跟你一样的 淘宝买的。。。。起不来阿。 求指教
回复 4楼 风在心中 的帖子
应该是copy的时候出问题了吧。。原来是这样子的
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i
for(j=0; j<5; j++);
}
回复 5楼 zxzxhhhhh 的帖子
这样 都能编译 通过??? GOD
回复 6楼 风在心中 的帖子
没错啊 找时间给你贴图
为什么我用这个程序 一点反应都没有。。 void delay(unsigned int t) 调整的是100us 没错阿
回复 7楼 zxzxhhhhh 的帖子
你用的时候 32K的晶振焊了吗?
回复 9楼 风在心中 的帖子
我的延时 没有那么精确 用的内部晶振1m 8m我都试过 都能使 不过稳定性有差异 串口通信 你线连得对不对啊
我的屏幕是12864-32A3,R9是103,R10是102,试了很多串行程序,都跑不起来啊,这个硬件需要改么,怎么改啊
回复 11楼 3204100225 的帖子
R9怎么会是103?
我的R9是0欧姆
】R10没有焊接
需要把R9去掉 移到R10 就行了 这个程序我试过可以
请问楼主sendbyte(0xf8)和sendbyte(0xfa)这句是干嘛的