12864 串行接入单片机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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); }
/*
* 12864P.c
*
* Created on: 2014-4-24
*
Author: Ts
*
*
*1 GND
*2 VCC
*3 VO
*4 RS(CS) --> P1.0
*5 R/W(SID) --> P1.1
*6 E(SCLK) --> P1.2
*15 PSB
--> GND (选择位 接低选择串行)
Fra Baidu bibliotek
uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789
void Send(uchar type,uchar transdata);
#define cyCS #define cySID #define cyCLK
/* 主函数 */ #include <msp430.h> #include <msp430g2553.h> #include "12864P.h"
void main() {
WDTCTL = WDTPW + WDTHOLD; Ini_Lcd();
lcd_pos(1,0); Disp_HZ("千山万水沿途风景",8); lcd_pos(2,0); Disp_HZ("有多美,也比不上",8); lcd_pos(3,0); Disp_HZ("在你身边徘徊。",7); lcd_pos(4,3); Disp_HZ("To林妹妹。",5);
*19 A *20 K * * * * * * */
--> 3.3V --> GND
//LCD12864P.c
#include<msp430g2553.h>
#include "12864P.h"
#define BIT(x)
(1 << (x))
#define uint unsigned int
#define uchar unsigned char
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”*/
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;
while(1); }
/*
* 12864P.h
*
* Created on: 2014-4-24
*
Author: Ts
* 用于 G2253 单片机 串行数据
*
*
*
* 改接口请在。c件中修改
*/
#ifndef 12864P_H_ #define 12864P_H_
//LCD12864P.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_ */
for(i = 8;i > 0;i--)
{
if(temp & 0x80)
cyPORT |= BIT(cySID);
else
cyPORT &= ~BIT(cySID);
cyPORT |= BIT(cyCLK);
temp <<= 1;
cyPORT &= ~BIT(cyCLK);
}
//三个字节之间一定要有足够的延时,否则易出现时序问题
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);
//延时等待液晶完成复位
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;
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]); }
0 //P1.0,片选信号 1 //P1.1,串行数据 2 //P1.2,同步时钟
#define cyPORT #define cyDDR
P1OUT P1DIR
void delay_1ms() {
uint i; for(i=0;i<1140;i++); }
void delay_nms(uint n) {