27,382
社区成员
发帖
与我相关
我的任务
分享
#include <msp430x14x.h>
#include <intrinsics.h>
#include"GUI.h"
#define uchar unsigned char
#define uint unsigned int
//==========芯片资料定义=======
#define WINDOW_XADDR_START 0x0050 // Horizontal Start Address Set
#define WINDOW_XADDR_END 0x0051 // Horizontal End Address Set
#define WINDOW_YADDR_START 0x0052 // Vertical Start Address Set
#define WINDOW_YADDR_END 0x0053 // Vertical End Address Set
#define GRAM_XADDR 0x0020 // GRAM Horizontal Address Set
#define GRAM_YADDR 0x0021 // GRAM Vertical Address Set
#define GRAMWR 0x0022 // memory write
#define RS_1 P3OUT|=BIT1 //数据p30
#define RS_0 P3OUT&=~BIT1 //命令
#define WR_1 P3OUT|=BIT2 //写 先置1再置0p31
#define WR_0 P3OUT&=~BIT2
#define RD_1 P3OUT|=BIT3 //读 先置1再置0p32
#define RD_0 P3OUT|=BIT3
#define CS_1 P3OUT|=BIT4 //片选p33
#define CS_0 P3OUT&=~BIT4
#define RST_1 P3OUT|=BIT5 //复位p34
#define RST_0 P3OUT&=~BIT5
uint color[]=
{0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};
//对应颜色是 红, 绿, 蓝, 黄 , 黑 , 白 , 天蓝 , 紫
void DelayMS(uint MS);
void DelayUS(uint US);
void InitPort(void);
void Write_Cmd_Data(uchar cmd,uint data);
void Write_Cmd(uchar DH,uchar DL);
void Write_Data(uchar DH,uchar DL);
void ILI9325_Initial(void);
void Write_Data_U16(uint data);
void LCD_test();
void LCD_SetWindow(uchar x0,uint y0,uchar x1,uint y1);
void LCD_setxy(uchar x,uint y);
void PIC_Point(uchar x,uint y,uint color);
void PIC_Clear(uint B_color);
void DelayMS(uint MS)
{
uchar i;
for(i=MS;i>0;i--)
{
__delay_cycles(1000);
}
}
void DelayUS(uint US)
{
uchar i;
for(i=US;i>0;i--)
{
__delay_cycles(1);
}
}
void InitPort(void)//端口初始化
{
P3DIR=0XFF;
P4DIR=0XFF;//数据口
}
void Write_Cmd_Data(uchar cmd,uint data)//写命令数据(cmd指向寄存器,data表示存入的数据)
{
uchar m,n;
m=data>>8;
n=data;
Write_Cmd(0x00,cmd);
Write_Data(m,n);
}
void Write_Cmd(uchar DH,uchar DL)//写命令
{
CS_0;
RS_0;
P4OUT=DH;
WR_1;
WR_0;//写高位
P4OUT=DL;
WR_1;
WR_0;//写低位
CS_1;
}
void Write_Data(uchar DH,uchar DL)//写数据
{
CS_0;
RS_1;
P4OUT=DH;
WR_1;
WR_0;//写高位
P4OUT=DL;
WR_1;
WR_0;//写低位
CS_1;
}
void Write_Data_U16(uint data)
{
uchar m,n;
m=data>>8;//高八位
n=data;//低八位
Write_Data(m,n);
}
void ILI9325_Initial(void)//屏幕初始化
{
InitPort();
CS_1;
DelayMS(10);
RST_0;
DelayMS(10);
RST_1;
DelayMS(60);//保障稳定显示(慢慢调整)
//显示设置
Write_Cmd_Data(0x0001,0x0100);
Write_Cmd_Data(0x0002,0x0700);
Write_Cmd_Data(0x0003,0x1030);
Write_Cmd_Data(0x0004,0x0000);
Write_Cmd_Data(0x0008,0x0207);
Write_Cmd_Data(0x0009,0x0000);
Write_Cmd_Data(0x000A,0x0000);
Write_Cmd_Data(0x000C,0x0000);
Write_Cmd_Data(0x000D,0x0000);
Write_Cmd_Data(0x000F,0x0000);
//电源设置
Write_Cmd_Data(0x0010,0x0000);
Write_Cmd_Data(0x0011,0x0007);
Write_Cmd_Data(0x0012,0x0000);
Write_Cmd_Data(0x0013,0x0000);
//vgh
Write_Cmd_Data(0x0010,0x1290);
Write_Cmd_Data(0x0011,0x0227);
//vregiout
Write_Cmd_Data(0x0012,0x001d); //0x001b
//delayms(100);
//vom amplitude
Write_Cmd_Data(0x0013,0x1500);
//delayms(100);
//vom H
Write_Cmd_Data(0x0029,0x0018);
Write_Cmd_Data(0x002B,0x000D);
//伽玛矫正
Write_Cmd_Data(0x0030,0x0004);
Write_Cmd_Data(0x0031,0x0307);
Write_Cmd_Data(0x0032,0x0002);// 0006
Write_Cmd_Data(0x0035,0x0206);
Write_Cmd_Data(0x0036,0x0408);
Write_Cmd_Data(0x0037,0x0507);
Write_Cmd_Data(0x0038,0x0204);//0200
Write_Cmd_Data(0x0039,0x0707);
Write_Cmd_Data(0x003C,0x0405);// 0504
Write_Cmd_Data(0x003D,0x0F02);
//窗口设置
Write_Cmd_Data(0x0050,0x0000);
Write_Cmd_Data(0x0051,0x00EF);
Write_Cmd_Data(0x0052,0x0000);
Write_Cmd_Data(0x0053,0x013F);
Write_Cmd_Data(0x0060,0xA700);
Write_Cmd_Data(0x0061,0x0001);
Write_Cmd_Data(0x006A,0x0000);
//
Write_Cmd_Data(0x0080,0x0000);
Write_Cmd_Data(0x0081,0x0000);
Write_Cmd_Data(0x0082,0x0000);
Write_Cmd_Data(0x0083,0x0000);
Write_Cmd_Data(0x0084,0x0000);
Write_Cmd_Data(0x0085,0x0000);
//
Write_Cmd_Data(0x0090,0x0010);
Write_Cmd_Data(0x0092,0x0600);
Write_Cmd_Data(0x0093,0x0003);
Write_Cmd_Data(0x0095,0x0110);
Write_Cmd_Data(0x0097,0x0000);
Write_Cmd_Data(0x0098,0x0000);
Write_Cmd_Data(0x0007,0x0133);
}
//设置显示窗口
void LCD_SetWindow(uchar x0,uint y0,uchar x1,uint y1)
{
Write_Cmd_Data(WINDOW_XADDR_START,x0);//水平显示起始坐标
Write_Cmd_Data(WINDOW_XADDR_END,x1);//水平显示结束坐标
Write_Cmd_Data(WINDOW_YADDR_START,y0);
Write_Cmd_Data(WINDOW_YADDR_END,y1);
Write_Cmd_Data(GRAM_XADDR,x0);//设置x坐标位置
Write_Cmd_Data(GRAM_YADDR,y0);//设置y坐标位置
Write_Cmd(0x00,GRAMWR );
}
//彩屏自测
void LCD_test()
{
uint temp,num;
uchar n,c;
//显示彩条
LCD_SetWindow(0,0,239,319);//240X320分辨率
for(n=0;n<8;n++)
{
temp=color[n];
for(num=40*240;num>0;num--)
Write_Data_U16(temp);//写入颜色
}
DelayMS(1);
//显示单色彩色
for(c=0;c<8;c++)
{
temp=color[c];
LCD_SetWindow(0,0,239,319);
for(n=0;n<240;n++)//可能属于等待机制
{
for(num=0;num<320;num++)
Write_Data_U16(temp);
}
}
DelayMS(1);
}
//单点显示
void LCD_setxy(uchar x,uint y)
{
LCD_SetWindow(x,y,x,y);
}
//清除显示内容,恢复为背景颜色
void PIC_Clear(uint B_color)
{
uint i,j;
LCD_SetWindow(0,0,240,320);
for(i=0;i<320;i++)
{
for(j=0;j<240;j++)
Write_Data_U16(B_color);
P2DIR=0XFF;
P2OUT=0X00;
}
}
void PIC_Point(uchar x,uint y,uint color)
{
LCD_setxy(x,y);
Write_Data_U16(color);
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ILI9325_Initial();
PIC_Clear(0xf800);
while(1)
{
//PIC_Clear(0xf800);
}
}