📄 msp430_ocmj8x15d.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 + -