⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocmj8x15d.h

📁 DS1302用于430的头文件
💻 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 + -