2553 驱动12864串行显示

zxzxhhhhh   2012-7-19 08:51 楼主
/********************************************************************
* 文件名  : 串行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死活调不好.....

回复评论 (15)

用ad采集128个二进制数 存成一个数组显示在12864上 数组怎么弄。。
点赞  2012-7-19 09:12
/********************************************************************
* 名称 : delay()
*
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
         unsigned int i,j;
         for(i=0; i     for(j=0; j<10; j++);
}

/********************************************************************

不完整阿
点赞  2012-7-19 13:32
楼主 我的LCD12864貌似 跟你一样的 淘宝买的。。。。起不来阿。 求指教
点赞  2012-7-19 14:04

回复 4楼 风在心中 的帖子

应该是copy的时候出问题了吧。。原来是这样子的

void delay(unsigned int t)
{
        unsigned int i,j;
        for(i=0; i     for(j=0; j<5; j++);
}
点赞  2012-7-19 14:19

回复 5楼 zxzxhhhhh 的帖子

这样 都能编译 通过???  GOD
点赞  2012-7-19 14:47

回复 6楼 风在心中 的帖子

没错啊 找时间给你贴图
点赞  2012-7-19 15:50
为什么我用这个程序 一点反应都没有。。 void delay(unsigned int t) 调整的是100us 没错阿
点赞  2012-7-19 16:10

回复 7楼 zxzxhhhhh 的帖子

你用的时候 32K的晶振焊了吗?
点赞  2012-7-19 16:23

回复 9楼 风在心中 的帖子

我的延时 没有那么精确 用的内部晶振1m 8m我都试过 都能使 不过稳定性有差异  串口通信 你线连得对不对啊
点赞  2012-7-19 16:46
我的屏幕是12864-32A3,R9是103,R10是102,试了很多串行程序,都跑不起来啊,这个硬件需要改么,怎么改啊
点赞  2012-7-29 20:31
串行显示图片怎么写啊
点赞  2012-7-30 16:14
牛  thanks
点赞  2012-8-13 20:38

回复 11楼 3204100225 的帖子

R9怎么会是103?
我的R9是0欧姆
】R10没有焊接
需要把R9去掉 移到R10 就行了  这个程序我试过可以
点赞  2012-8-15 21:16
学习中。。。新手支持
点赞  2013-1-14 17:06
请问楼主sendbyte(0xf8)和sendbyte(0xfa)这句是干嘛的
点赞  2013-9-6 14:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复