📄 ocmj8x15d.h
字号:
/*******************************************
型号:OCMJ8X15B(带触摸屏)
MCU :MSP430x
功能:头文件
编写:木偶
日期:2009年1月20日17:52:37
********************************************/
#ifndef __ocmj8x15d
#define __ocmj8x15d
#include <msp430x16x.h>
#define uchar unsigned char
#define uint unsigned int
/*-------------------------------------------
引脚定义区[所有方向从单片机出发为参考]
-------------------------------------------*/
#define data_ora P2OUT //MCU P2<------> LCM
#define req1 P1OUT |= BIT0 //[P1.0][out]请求信号,H有效
#define req0 P1OUT &= ~BIT0
#define busy P1IN & BIT1 //[P1.1][in]H:已收到数据并在处理中,L:空闲可接收数据
#define busy_BIT BIT1
//#define INT; //[P1.2][inttrupt]触摸中断
#define INT_BIT BIT2 //定义触摸中断连接在端口的第二位线上
#define INT_IN P1IN
#define INT_DIR P1DIR
#define INT_IE P1IE
#define INT_SEL P1SEL
#define DCLK1 P1OUT |= BIT3 //[P1.3][out]外部时钟输入
#define DCLK0 P1OUT &= ~BIT3
#define CS1 P1OUT |= BIT4 //[P1.4][out]片选信号
#define CS0 P1OUT &= ~BIT4
#define DIN1 P1OUT |= BIT5 //[P1.5][out]串行数据输入口
#define DIN0 P1OUT &= ~BIT5
#define DOUT P1IN & BIT6 //[P1.6][in]串行数据输出口
#define DOUT_BIT BIT6
/**********nus延时子程序*************/
void delay_nus(uint n)
{
while(n--);
}
/**********nms延时子程序*************/
void delay_nms(uint n)
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<1000;j++);
}
/**********写命令或数据*************/
void SendData(uchar content)
{
while((busy) == busy_BIT);
data_ora=content;
req1;
while((busy) != busy_BIT);
req0;
}
/**********写命令或数据到LCD*************/
void SendDataToLCD(uchar cmd,uchar addr_x,uchar addr_y)
{
SendData(cmd);
SendData(addr_x);
SendData(addr_y);
}
/*==================显示点===================*/
void display_Point(uchar xx,uchar yy)
{
SendDataToLCD(0xf2,xx,yy);
}
/*==================画线段===================*/
void draw_Line(uchar x1,uchar y1,uchar x2,uchar y2)
{
uchar i,delta_x,delta_y,area;//象限指的是p2相对于p1的位方位
if((x1>x2)&&(y1>=y2)) area = 2;//p2在p1的左上角
if((x1>=x2)&&(y1<y2)) area = 3;//p2在p1的左下角
if((x1<x2)&&(y1<=y2)) area = 4;//p2在p1的右上角
if((x1<=x2)&&(y1>y2)) area = 1;//p2在p1的左下角
if(x1>=x2) delta_x = x1-x2;
else delta_x = x2-x1;
if(y1>=y2) delta_y = y1-y2;
else delta_y = y2-y1;
//---------------------------------------
if((area == 1)&&(delta_x >= delta_y))
{
for(i = 0;i<(delta_x);i++)
{
display_Point(x1+i,y1-((delta_y*i)/delta_x));//
}
}
if((area == 1)&&(delta_x < delta_y))
{
for(i = 0;i<(delta_y);i++)
{
display_Point(x1+((delta_x*i)/delta_y),y1-i);//
}
}
if((area == 2)&&(delta_x >= delta_y))
{
for(i = 0;i<(delta_x);i++)
{
display_Point(x1-i,y1-((delta_y*i)/delta_x));//
}
}
if((area == 2)&&(delta_x < delta_y))
{
for(i = 0;i<(delta_y);i++)
{
display_Point(x1-((delta_x*i)/delta_y),y1-i);//
}
}
if((area == 3)&&(delta_x >= delta_y))
{
for(i = 0;i<(delta_x);i++)
{
display_Point(x1-i,y1+((delta_y*i)/delta_x));
}
}
if((area == 3)&&(delta_x < delta_y))
{
for(i = 0;i<(delta_y);i++)
{
display_Point(x1-((delta_x*i)/delta_y),y1+i);
}
}
if((area == 4)&&(delta_x >= delta_y))
{
for(i = 0;i<(delta_x);i++)
{
display_Point(x1+i,y1+((delta_y*i)/delta_x));
}
}
if((area == 4)&&(delta_x < delta_y))
{
for(i = 0;i<(delta_y);i++)
{
display_Point(x1+((delta_x*i)/delta_y),y1+i);
}
}
//---------------------------------------
}
/**************显示点阵******************/
void display_Grid(uchar data1,uchar data2)
{
uchar i,j,k;
for(k=0;k<128;k=k+4)
{
for(j=0;j<2;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,k+j);
SendData(data1);
}
}
for(j=2;j<4;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,k+j);
SendData(data2);
}
}
}
}
/*************显示图形***************/
void display_Picture(uchar *img)
{
uchar i,j;
for(j=0;j<128;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf3,i,j);
SendData(img[j*30+i]);
}
}
}
/************显示中文*****************/
void display_chn(uchar *chn)
{
uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<15;i++)
{
SendDataToLCD(0xf0,i,j);
SendData(chn[i*2+30*j]-0xa0);
SendData(chn[i*2+30*j+1]-0xa0);
}
}
}
/************显示中文*****************/
void display_chn1(uchar addr_x,uchar addr_y,uchar *chn)
{
uchar i;
for(i=0;i<10;i++)
{
SendDataToLCD(0xf0,addr_x+i,addr_y);
SendData(chn[2*i]-0xa0);
SendData(chn[2*i+1]-0xa0);
}
}
/************显示字符(8X16)****************/
void display_eng(uchar n,uchar *eng)
{
uchar i,j;
for(j=0;j<n;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf9,i,j*16);
SendData(eng[j*30+i]);
}
}
}
/*==================在任意位置显示一行字符(8X8)====================*/
void display_char(uchar addr_x,uchar addr_y,uchar n,uchar *eng)
{
uchar i;
for(i=0;i<n;i++)
{
SendDataToLCD(0xf1,addr_x+i,addr_y);
SendData(eng[i]);
}
}
/*=============================================================*/
/*==================在任意位置显示一串数字(8X8)====================*/
void display_number(uchar addr_x,uchar addr_y,unsigned long num)
{
uchar i,flag = 0;
uchar tab[] = {"0000000000"};
tab[0]=num/1000000000+0x30;
tab[1]=(num/100000000)%10+0x30;
tab[2]=(num/10000000)%10+0x30;
tab[3]=(num/1000000)%10+0x30;
tab[4]=(num/100000)%10+0x30;
tab[5]=(num/10000)%10+0x30;
tab[6]=(num/1000)%10+0x30;
tab[7]=(num/100)%10+0x30;
tab[8]=(num/10)%10+0x30;
tab[9]=num%10+0x30;
for(i=0;i<10;i++)
{
if(tab[i]!='0')flag = 1;
if(flag)
{
SendDataToLCD(0xf1,addr_x+i,addr_y);
SendData(tab[i]);
}
}
}
/*=============================================================*/
/************显示字符(8X8)****************/
void display_eng1(uchar addr_y,uchar n,uchar *eng)
{
uchar i,j;
for(j=0;j<n;j++)
{
for(i=0;i<30;i++)
{
SendDataToLCD(0xf1,i,addr_y+j*8);
SendData(eng[j*30+i]);
}
}
}
/************SPI写数据***********/
WriteDataTo7843(unsigned char num)
{
unsigned char count=0;
DCLK0;
for(count=0;count<8;count++)
{
if((num & BIT7) == BIT7)
DIN1;
else
DIN0;
num = num<<1;
DCLK0; _NOP();_NOP();_NOP(); //上升沿有效
DCLK1; _NOP();_NOP();_NOP();
}
}
/************SPI读数据***********/
ReadDataFrom7843()
{
unsigned char count=0;
unsigned int Num=0;
for(count=0;count<12;count++)
{
Num<<=1;
DCLK1; _NOP();_NOP();_NOP();
DCLK0; _NOP();_NOP();_NOP();
if((DOUT) == BIT6) Num++;
}
return(Num);
}
/***********SPI开始**********/
void start()
{
DCLK0;
CS1;
DIN1;
DCLK1;
CS0;
}
#endif /* #ifndef __ocmj8x15d */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -