当前位置:首页 > 北理工嵌入式系统实验报告 - 图文
//设置ADC 控制寄存器 2)中断服务程序 int Dat0, i;
int Count = 5; //转换次数
unsigned int x, y; //存放转换结果
unsigned int AD_XY = 0; //存放最终XY 的转换结果 Dat0 = 0; //初始化累加变量
while ((rADCDAT0 & 0x8000) | (rADCDAT1 & 0x8000)); //测试rADCDAT 的bit15 是否等于0(触笔按下状态) //下面的代码是X,Y 分别转换模式
rGPGUP = 0xffff; //设置GPIO,禁止GPG 上拉
rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(1); //设置转换X 的位置
for(i = 0; i < Count; i++){ //开始转换Y,共Count 次 rADCCON = (1<<14)|(49<<6)|(7<<3)|(0<<2)|(0<<1)|(1); //设置控制寄存器
while(rADCCON & 0x1); //测试转换开始位
while(!(0x8000 & rADCCON)); // 测试ECFLG 位,转换是否结束 Delay(200);
Dat0 += (rADCDAT0) & 0x3ff; //转换结果累加,最后取平均 }
EL - ARM - 830 实验指导书 77
if (Dat0 != 0){ //如果X 有效,继续转换Y x = Dat0 / Count; Dat0 = 0;
rADCTSC=(0<<8)|(1<<7)|(0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(2); //设置转换Y 的位置
for (i = 0; i < Count; i++){ //开始转换Y,共Count 次 rADCCON = (1<<14)|(49<<6)|(5<<3)|(0<<2)|(0<<1)|(1); //设置控制寄存器
while(rADCCON & 0x1); //测试转换开始位
while(!(0x8000 & rADCCON)); // 测试ECFLG 位,转换是否结束 Delay(200);
Dat0 += (rADCDAT1) & 0x3ff; //转换结果累加,最后取平均 }
y = Dat0 / Count; }
rGPGUP = 0x00; //设置GPIO,使能GPG 上拉
AD_XY = (x << 16) | y; //高16 位存放X,低16 位存放Y //恢复等待中断模式 Touch_Init(); Delay(1000);
while (!((rADCDAT0 & 0x8000) & (rADCDAT1 & 0x8000)));
//测试rADCDAT 的bit15 是否等于1(触笔抬起状态),如果是1,则可以开中断了
22
详细具体的应用,请参见\\实验程序\\HARDWARE\\ADS\\实验十三目录下的Touch.mcp 项 目文件。请详细阅读代码注释。 五、实验步骤
1.本实验使用实验教学系统的CPU 板,LCD,触摸屏。
2.在PC 机并口和实验箱的CPU 板上的JTAG 接口之间,连接仿真调试电缆。 3.把LCD 电源开关附近的S2 的2 开关拨到ON 状态。
4.检查连接是否可靠,可靠后,接入电源线,系统上电。打开LCD 的电源开关。
5.打开ADS1.2 开发环境,从里面打开\\实验程序\\HARDWARE\\ADS\\实验十三\\Touch.mcp 项目文件,进行编译。
6.编译通过后,进入ADS1.2 调试界面,加载\\实验程序\\HARDWARE\\ADS\\实验十三 EL - ARM - 830 实验指导书 78
\\Touch_Data\\Debug 中的映象文件程序映像Touch.axf。
7.在ADS 调试环境下全速运行映象文件。用圆滑的笔头点击屏,观察液晶屏的显示 结果。具体的响应需要根据具体的应用程序进行开发。
8.实验完毕,先关闭LCD 电源开关,S2 的2 开关复位,再关闭ADS 开发环境,关闭 电源。
六、实验总结
经过该实验,我学会了ARM在触摸屏上的编程及相关应用,了解触摸屏工作的基本原理, 理解LCD 如何和触摸屏相配合,通过编程实现了对触摸屏的控制。对于触摸屏取点采样的程序思想有了一定认识。
23
填充三角形实验
一、实验说明:
利用ARM及电阻式触摸屏实现三角形绘制及填充功能 二、使用说明
先后触摸屏幕三次,这三个点作为三角形三个顶点。ARM自动绘制图形。 再次触摸屏幕图形清零,并将这次触摸作为下次绘制三角形一个顶点输入。 三、程序说明
该程序是基于例程十三编写而成的,利用结构 typedef struct Point{ int x; int y;
}; struct Point P[3]; 储存输入点坐标,当变量i=3时开始绘制,先绘制出三边,再进行填充:以其中一点为顶点,与对边连线,在这里,我是以横坐标为自变量计算对边上点坐标的 四、编写时遇到的问题 在编写的过程中,首先遇到问题是不能正确画出图形,由于在k不等于无穷时算对边坐标用到式子y1=k(x1-x0)+y0,其中k=(y1-y0)/(x1-x0)为int形变量,故k与实际值不等,我将语句(P[1].y-P[0].y)/(P[1].x-P[0].x)*(P[1].y-P[0].y)+P[0].y改为(P[1].y-P[0].y)*(k-P[0].x)/(P[1].x-P[0].x)+P[0].y 结果就正确了
此外,我将语句k++改为k=k+0.03,(此处k相当于变量x)以解决x1-x0较小时,对边上点数不够三角形填不满的情况(先前试过k=k+0.01的情况,填充速度不理想,k=k+0.03,情况得到了改善)其实该程序可以进一步改善,即x1-x0较小的时候用y来讨论,但鉴于目前程序已经满足要求,就不必进一步讨论了 五、程序主函数
;************************************************************************************************************ ;* 北京精仪达盛科技有限责任公司 ;* 研 发 部 ;*
;* http://www.techshine.com ;*
;*--------------------------------------------- 文件信息 ---------------------------------------------------- ;*
;* 文件名称 : MAIN.c
;* 文件功能 : 所有应用程序的头文件均加在此文件中 ;* 补充说明 :
;*-------------------------------------------- 最新版本信息 ------------------------------------------------- ;* 修改作者 : ARM7开发小组 ;* 修改日期 : 2004/04/25 ;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
24
;* 文件作者 : ARM7开发小组 ;* 创建日期 : 2004/04/20 ;* 版本声明 : v1.0.0
;*----------------------------------------------------------------------------------------------------------- ;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************ ;*/
//#include \#include \#include \#include \#include \#include \#include \
char ad_flag;
extern GUI_FONT GUI_Font8x16;
extern GUI_FONT CHINESE_FONT12; extern GUI_FONT CHINESE_FONT16;
int i=0; double k;
typedef struct Point{ int x; int y;
}; struct Point P[3]; /*
************************************************************************************************************* - 函数名称 : Main(void)
- 函数说明 : 系统的主程序入口 - 输入参数 : 无 - 输出参数 : 无
************************************************************************************************************* */
void Main(void){
GUI_Init();
25
共分享92篇相关文档