搜索
bottom↓
回复: 16

【LaunchPad】修改12864串口驱动程序

[复制链接]

出0入0汤圆

发表于 2012-7-15 18:03:17 | 显示全部楼层 |阅读模式
本帖最后由 李晓航123 于 2012-7-15 18:41 编辑


主函数main.c
#include <msp430g2553.h>
#include"LCD12864P.h"

void main()
{
        WDTCTL = WDTPW + WDTHOLD;
        Ini_Lcd();
           lcd_pos(1,0);
           Disp_HZ("液晶12864",5);
           lcd_pos(3,4);
           Disp_HZ("欢迎使用",4);
           lcd_pos(2,3);
           Disp_SZ(0);
           Disp_SZ(3);
    while(1);
}

LCD12864P.c
#include<msp430g2553.h>
#define BIT(x)        (1 << (x))
#define uint unsigned int
#define uchar unsigned char
uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

void Send(uchar type,uchar transdata);

#define cyCS      0    //P1.0,片选信号
#define cySID     1    //P1.1,串行数据
#define cyCLK     2    //P1.2,同步时钟
#define cyPORT    P1OUT
#define cyDDR     P1DIR

void delay_1ms()
{
        uint i;
        for(i=0;i<1140;i++);
}

void delay_nms(uint n)
{
    uint i = 0;
    for(i = n;i > 0;i--)
        delay_1ms();
}

void Ini_Lcd(void)
{
        cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS);   //相应的位端口设置为输出
        delay_nms(600);                 //延时等待液晶完成复位
        Send(0,0x30);  /*功能设置:一次送8位数据,基本指令集*/
        delay_nms(10);
        Send(0,0x02);  /*DDRAM地址归位*/
        delay_nms(5);
        Send(0,0x0c);  /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
        delay_nms(5);
        Send(0,0x01);  /*清屏,将DDRAM的位址计数器调整为“00H”*/
        delay_nms(500);
        Send(0,0x06);  /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
        delay_nms(10);
}

void Send(uchar type,uchar transdata)//0-写控制命令,1-写数据
{
        uchar firstbyte = 0xf8;
        uchar temp;
        uchar i,j = 3;

        if(type) firstbyte |= 0x02;

        cyPORT |= BIT(cyCS);
        cyPORT &= ~BIT(cyCLK);
        while(j > 0)
        {
                if(j == 3) temp = firstbyte;
                else if(j == 2) temp = transdata&0xf0;
                else  temp = (transdata << 4) & 0xf0;

                for(i = 8;i > 0;i--)
                {
                        if(temp & 0x80)        cyPORT |= BIT(cySID);
                        else                        cyPORT &= ~BIT(cySID);
                        cyPORT |= BIT(cyCLK);
                        temp <<= 1;
                        cyPORT &= ~BIT(cyCLK);
                }
                //三个字节之间一定要有足够的延时,否则易出现时序问题
                if(j == 3)        delay_nms(1);
                else               delay_nms(1);

                j--;
        }

        cyPORT &= ~BIT(cySID);
        cyPORT &= ~BIT(cyCS);
}

void lcd_pos(uchar x,uchar y)//定位
{
         uchar pos;
          switch(x)
          {
            case 1:pos=0x80;break;
            case 2:pos=0x90;break;
            case 3:pos=0x88;break;
            case 4:pos=0x98;break;
            default:pos=0x80;
          }
          pos += y;
          Send(0,pos);
}

void Disp_HZ(const uchar * pt,uchar num)//显示汉字
{
    uchar i;
           for(i = 0;i < (num*2);i++)
           Send(1,*(pt++));
}

void Disp_SZ(uchar shuzi)//显示一个数字
{
    Send(1,LCD_table[shuzi]);
}

LCD12864P.h
#ifndef LCD12864_H_
#define LCD12864_H_
#define uint unsigned int
#define uchar unsigned char
extern uchar LCD_table[];//0123456789
extern void delay_1ms();
extern void delay_nms(uint n);
extern void Ini_Lcd(void);
extern void Send(uchar type,uchar transdata);//0-写控制命令,1-写数据
extern void lcd_pos(uchar x,uchar y);//定位
extern void Disp_HZ(const uchar * pt,uchar num);//显示汉字
extern void Disp_SZ(uchar shuzi);//显示一个数字
#endif /* LCD12864_H_ */

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981

出0入0汤圆

发表于 2012-7-15 18:30:12 | 显示全部楼层
加精的好帖

出0入0汤圆

发表于 2012-7-19 21:41:52 | 显示全部楼层
今年省赛很多都是TI赞助的,2553的都热闹起来了

出0入0汤圆

发表于 2012-7-25 12:22:30 | 显示全部楼层
支持TI的产品

出0入0汤圆

 楼主| 发表于 2012-7-25 14:18:00 | 显示全部楼层
xiaocai2012 发表于 2012-7-25 08:20
硬件怎么接的啊?没调试出来,你那屏是不是带中文字库的???

是的,带字库

出0入0汤圆

发表于 2012-7-26 10:51:22 | 显示全部楼层
不错      

出0入0汤圆

发表于 2012-7-26 15:39:42 | 显示全部楼层
厉害。不错的想法

出0入0汤圆

发表于 2012-7-26 16:18:28 | 显示全部楼层
这个可以有,只是硬件怎么连接的?

出0入0汤圆

 楼主| 发表于 2012-7-26 19:37:53 | 显示全部楼层
xiaocai2012 发表于 2012-7-26 10:49
我的12864是要5V供电的,可是launchpad输出的是3.3V,这个应该如何给电比较好呢? ...

外接一个5V的电源

出0入0汤圆

 楼主| 发表于 2012-7-26 19:38:47 | 显示全部楼层
abcfanyuan 发表于 2012-7-26 16:18
这个可以有,只是硬件怎么连接的?

#define cyCS      0    //P1.0,片选信号
#define cySID     1    //P1.1,串行数据
#define cyCLK     2    //P1.2,同步时钟
3根控制线,其他电源,地,和调光不多说了

出0入0汤圆

发表于 2012-7-27 08:30:15 | 显示全部楼层
好东西,呵呵

出0入0汤圆

发表于 2012-7-27 15:14:47 | 显示全部楼层
好东西!我在网上搜了很久没找到好程序

出0入0汤圆

 楼主| 发表于 2012-7-27 16:03:46 | 显示全部楼层
新月弯刀 发表于 2012-7-27 15:14
好东西!我在网上搜了很久没找到好程序

最近省赛的特别多,你也是省赛的吗

出0入0汤圆

发表于 2012-7-27 17:39:27 | 显示全部楼层
void Disp_HZ(const uchar * pt,uchar num)//显示汉字
{
    uchar i;
           for(i = 0;i < (num*2);i++)
           Send(1,*(pt++));
}

楼主请教一下,编译的时候会出现警告,把const删了就没有了,是什么情况,删了会影响吗?

出0入0汤圆

 楼主| 发表于 2012-7-27 17:54:55 | 显示全部楼层
qq252537834 发表于 2012-7-27 17:39
void Disp_HZ(const uchar * pt,uchar num)//显示汉字
{
    uchar i;

不会有影响

出0入0汤圆

发表于 2012-7-28 14:30:19 | 显示全部楼层
外接5V电源,共地

出0入0汤圆

发表于 2012-7-28 15:06:47 | 显示全部楼层
李晓航123 发表于 2012-7-27 16:03
最近省赛的特别多,你也是省赛的吗

是的 不过把他搞出来了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-2 16:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表