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

📄 msp430_ocmj8x15d.c

📁 DS1302用于430的头文件
💻 C
字号:
/*******************************************
型号:OCMJ8X15B(带触摸屏)
MCU :MSP430F1612
功能:演示
编写:roger
日期:2007/4/14
********************************************/

#include <msp430x16x.h>
#include "OCMJ8x15D.h"
#include "puma.h"
#define uchar      unsigned char
#define uint       unsigned int

uchar taby[4];
uchar tabx[4];
uint x[6],y[6],xmin,ymin,xmax,ymax;
uint r,q=1;

/***********主程序***************/
void main (void)
{
	uchar i=0;
	uint j=0,last_j=0;
	uchar xx,yy,last_xx,last_yy,x_aim = 1,y_aim = 1;//方向变量
	req0;
	
	WDTCTL = WDTPW + WDTHOLD;//关看门狗

	P2DIR = 0xff;//P2为数据口
	P1DIR = 0x01;//P1.0输出,P1.1输入
	P1DIR |= BIT3+BIT4+BIT5;
/*----------------------------*/
//	中断端口配置P1.2中断输入
//	下跳变触发触摸中断
//		[PxDIR	方向寄存器]			(1输出)
//		[PxSEL	功能选择寄存器]		(1外围器件功能)
//		{PxIE	中断使能寄存器}		(1允许)
//		{PxIES	中断沿选择寄存器}	(1负跳变产生中断标志)
//  	{PxIFG	中断标志寄存器}		(1表明对应的引脚有中断请求)
	P1DIR &= ~BIT2;
	P1IE |= BIT2;//允许中断
	P1IES |= BIT2;//正跳变产生中断
	
	_EINT();// 全局中断允许
/*-------------------------------*/
	SendData(0xf4);//清屏
	SendData(0xf4);//清屏
	SendData(0xf4);//清屏
	SendData(0xf4);//清屏
	SendData(0xf4);//清屏
	xx = 10;
	yy = 10;
	while(1)
    {
		for(i=0;i<9;i++)
		{
			SendData(0xf4);//清屏
			
//			delay_nms(1000);
			
//			SendData(0xFA);//0xFA反白指令
			
			SendData(0xf4);
			display_chn(ch1 + i*30);
			delay_nms(100);
/*
			SendData(0xf4);
			display_Picture(pic);
			delay_nms(100);
			
			SendData(0xf4);
			display_Grid(0xa6,0x6a);
			delay_nms(1000);
*/
		}
	}
}

//端口中断实验
//学习使用P1和P2端口的中断功能
//相关内容:
//1---->寄存器
//		[PxDIR	方向寄存器]			(1输出)
//		[PxIN	输入寄存器]			只读
//		[PxOUT	输出寄存器]			读写
//		[PxSEL	功能选择寄存器]		(1外围器件功能)
//		{PxIE	中断使能寄存器}		(1允许)
//		{PxIES	中断沿选择寄存器}	(1负跳变产生中断标志)
//  	{PxIFG	中断标志寄存器}		(1表明对应的引脚有中断请求)
//2---->P1中断函数写法
//		#pragma vector =PORT2_VECTOR
//		__interrupt void Port2_vector(void)
//		{
//			//语句;
//		}
//3---->中断处理
//		通过查询中断标志寄存器来判断是哪个端口产生的中断
//		由于P1口中断是多远中断,故置位的位需要软件清零
/*=================P1口中断函数==================*/
#pragma vector = PORT1_VECTOR
__interrupt void Port1(void)
{
	/*-------------*/
	//用户代码
	uchar i;
	uint X=0,Y=0,X_temp[2],Y_temp[2];
	while((INT_IN & INT_BIT) != INT_BIT)
	{
		start(); //启动SPI
		delay_nus(2);
		for(i=0;i<2;i++)
		{
			for(r=0;r<6;r++)
			{
				WriteDataTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
				DCLK1; _NOP();_NOP();_NOP();_NOP();
				DCLK0; _NOP();_NOP();_NOP();_NOP();
				x[r]=ReadDataFrom7843();  //读X轴坐标
				WriteDataTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
				DCLK1; _NOP();_NOP();_NOP();_NOP();
				DCLK0; _NOP();_NOP();_NOP();_NOP();
				y[r]=ReadDataFrom7843();  //读Y轴坐标
			}
			xmin=x[0];xmax=x[0];ymin=y[0];ymax=y[0];
			for(r=1;r<6;r++)
			{  
				if(x[r]<xmin)
					xmin=x[r];
				if(x[r]>xmax)
					 xmax=x[r];
				if(y[r]<ymin)
					ymin=y[r];
				if(y[r]>ymax)
					ymax=y[r];
			}
	
			X_temp[i]=(x[0]+x[1]+x[2]+x[3]+x[4]+x[5]-xmin-xmax)/4;
			Y_temp[i]=(y[0]+y[1]+y[2]+y[3]+y[4]+y[5]-ymin-ymax)/4;//去掉最大值和最小值取平均
		}
		CS1;
	//	INT1;
		X=(X_temp[0]+X_temp[1])/2;
		Y=(Y_temp[0]+Y_temp[1])/2;
		tabx[0]=X/1000;
		tabx[1]=X%1000/100;
		tabx[2]=X%100/10;
		tabx[3]=X%10;
		taby[0]=Y/1000;
		taby[1]=Y%1000/100;
		taby[2]=Y%100/10;
		taby[3]=Y%10;
		
		if(q==1)
		{
			SendData(0xf4);//清屏
			SendData(0xf4);//清屏
			SendData(0xf4);//清屏
			SendData(0xf4);
			display_chn1(2,0,tab);
			SendDataToLCD(0xf9,11,32);
			SendData(0x58);
			SendDataToLCD(0xf9,12,32);
			SendData(0x3d);
			SendDataToLCD(0xf9,11,48);
			SendData(0x59);
			SendDataToLCD(0xf9,12,48);
			SendData(0x3d);
			q = 0;
		}
	
		for(r=0;r<4;r++)//显示X坐标
		{    
			SendData(0xfa); //反白显示
			SendDataToLCD(0xf9,13+r,32);
			SendData(tabx[r]+0x30);
			SendData(0xfa); //关反白显示
		}
		for(r=0;r<4;r++)//显示Y坐标
		{     
			SendDataToLCD(0xf9,13+r,48);
			SendData(taby[r]+0x30);
		}
		delay_nms(30);
		/*-------------*/
	}
	P1IFG &=0x00;
	q = 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -