ATMEGA16用IO模拟SPI驱动ADS7843

发布者:学海星空最新更新时间:2016-09-23 来源: eefocus关键字:ATMEGA16  模拟SPI  驱动ADS7843 手机看文章 扫描二维码
随时随地手机看文章
最近在搞AVR单片机的ILI9325的驱动、简单GUI的移植,成功之后就搞ADS7843的驱动,用avr-gcc (WinAVR 20100110) 4.3.3编译。
其效果如下图:
 
 
以下是其驱动程序:
 
typedef unsigned char BYTE;  // 8-bit 
typedef unsigned int WORD;  // 16-bit 
typedef unsigned long DWORD;  // 32-bit 
 
#define _nop_() asm("NOP") 
 
#define touch_PORT       PORTB 
 
#define PEN_Q            7 
#define DOUT             6
#define DIN              5                   //引脚定义 
#define CS               4     //mega16 
#define DCLK             3 
#define SPI_CS_Assert()   touch_PORT &= ~_BV(CS)   
#define SPI_CS_Deassert() touch_PORT |=  _BV(CS) 
 
WORD TP_X=1,TP_Y=1;    //当前触控坐标 
//********************************************************** 
void SPI_Init(void)                                     //SPI开始 
DDRB|=_BV(CS)|_BV(DCLK)|_BV(DIN); 
touch_PORT|=_BV(CS)|_BV(DCLK)|_BV(DIN); 
//********************************************************** 
void WriteCharTo7843(unsigned char num)          //SPI写数据 
unsigned char count=0,temp; 
touch_PORT&=~_BV(DCLK); 
for(count=0;count<8;count++) 
temp=num; 
if(temp&0x80) 
touch_PORT|=_BV(DIN); 
else 
touch_PORT&=~_BV(DIN); 
num<<=1; 
touch_PORT&=~_BV(DCLK);
_nop_();_nop_();_nop_();              //上升沿有效 
touch_PORT|=_BV(DCLK); 
_nop_();_nop_();_nop_(); 
//********************************************************** 
unsigned int ReadFromCharFrom7843(void)             //SPI 读数据 
unsigned char count=0; 
unsigned int Num=0; 
for(count=0;count<12;count++) 
Num<<=1; 
touch_PORT|=_BV(DCLK); 
_nop_();_nop_();_nop_();                //下降沿有效 
touch_PORT&=~_BV(DCLK); 
_nop_();_nop_();_nop_(); 
if(PINB&_BV(DOUT)) 
Num++; 
return(Num); 
}
void AD7843(void)              //接收11次后求10次的平均值
static WORD X_TEMP[11],Y_TEMP[11]; 
static BYTE count=0; 
WORD lx=0,ly=0;
if (!(PINB&_BV(PEN_Q))) 
{   
_delay_us(500); 
while (!(PINB&_BV(PEN_Q))) 
SPI_CS_Assert();
WriteCharTo7843(0x90);        //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料 
touch_PORT|=_BV(DCLK); 
_nop_();_nop_();_nop_(); 
touch_PORT&=~_BV(DCLK); 
_nop_();_nop_();_nop_(); 
Y_TEMP[count]=ReadFromCharFrom7843(); 
WriteCharTo7843(0xD0);       //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料 
touch_PORT|=_BV(DCLK); 
_nop_();_nop_();_nop_(); 
touch_PORT&=~_BV(DCLK);
_nop_();_nop_();_nop_(); 
X_TEMP[count]=ReadFromCharFrom7843(); 
SPI_CS_Deassert(); 
if(count++==10) 
for(count=0;count<10;count++) 
X_TEMP[10]+=X_TEMP[count]; 
Y_TEMP[10]+=Y_TEMP[count]; 
TP_X=X_TEMP[10]/10; 
TP_Y=Y_TEMP[10]/10;  
count=0; 
// GUI_wrul(100,20,TP_X,RGB(120,255,0),color[2]);//(uchar x, uint y, unsigned long num, uint color,uint b_color); 
// GUI_wrul(200,20,TP_Y,RGB(120,255,0),color[2]);
lx=240-((TP_X-240)/16);   //将AD值转换位显示屏坐标 
ly=320-((TP_Y-380)/12);   //将AD值转换位显示屏坐标 
// GUI_wrul(100,40,X_TEMP[10],RGB(120,255,0),color[2]);//(uchar x, uint y, unsigned long num, uint color,uint b_color); 
// GUI_wrul(200,40,Y_TEMP[10],RGB(120,255,0),color[2]);
GUI_Point(lx,ly,RGB(250,0,250));
Y_TEMP[10]=0; 
X_TEMP[10]=0;
}
count=0; 
 
}
整个程序比较简单,自己分析吧。

关键字:ATMEGA16  模拟SPI  驱动ADS7843 引用地址:ATMEGA16用IO模拟SPI驱动ADS7843

上一篇:AVR单片机IO仿真I2C
下一篇:AVR单片机硬件I2C接口驱动程序

推荐阅读最新更新时间:2024-03-16 15:11

单片机准双向口IO详解
单片机的几种IO口配置 在单片机学习、开发和应用中,IO口的配置对功能的实现起着重要的作用,下面介绍常见的四种配置,而现在很多单片机都兼有这四种配置,可供选择。 一.准双向口配置 如下图,当IO输出为高电平时,其驱动能力很弱,外部负载很容易将其拉至低电平。当IO输出为低电平时,其驱动能力很强,可吸收相当大的电流。 准双向口有三个上拉晶体管,一个 极弱上拉 ,当端锁存器为逻辑 1 时打开,当端口悬空时, 极弱上拉 将端口上拉至高电平。 第二个上拉晶体管为 弱上拉 ,当端口锁存器为逻辑 1 且端口本身也为 1 时打开,此上拉提供的电流,使准双向口输出为 1 。如果此时端口被 外部装置拉到逻辑 0 时,通过施密
[单片机]
单片机准双向口<font color='red'>IO</font>详解
ATMEGA16单片机usart通信(主从多机通信)proteus仿真与源码
部分单片机源程序如下: /***************************************************** This program was produced by the CodeWizardAVR V2.05.1b Evaluation Automatic Program Generator ?Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l. Project : Version : Date : 2017/12/21 Author : Freeware, for evaluation and non-commercial use only
[单片机]
<font color='red'>ATMEGA16</font>单片机usart通信(主从多机通信)proteus仿真与源码
STM32快速组织代码分析例如IO端口初始化GPIO_Init(GPIOE, &GPIO_InitStructure)
GPIO_Init(GPIOE, &GPIO_InitStructure); 函数实体定义是: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) //结构体的指针,指向结构体变量的首地址2020.2.18 //疑问?为什么用结构体指针类型定义,而不用结构体类型定义GPIOx, 对应的外设的内部地址单片机第一好的 对应自定义的结构体指针变量的地址,编译器自动分配识别地址 //GPIO_InitStruct2020.2.19
[单片机]
LPC1788-IO模拟SPI--驱动AD7708--寄存器操作
最近在使用AD7708采集数据-本来是想使用LPC1788自带的SSP进行控制,但是在多次实验过程中发现,单个读取寄存器是没有问题的,但是在连续读取时出现问题,一直没有解决,项目着急使用就直接用IO口模拟SPI,比较简单就准确读出了数据,也没有出现上述问题,记之! 个人还是觉得是自己配置的原因,后续会继续研究SSP的控制AD7708,希望能够搞清楚! 主函数只需要调用两个函数---AD7708_Reg_Init();----AD7708_ReadAD_Data(); /*-------ad7708_spi_io.h-------------*/ #ifndef __AD7708_SPI_IO_H #define _
[单片机]
AVR--IO结构分析
下图为AVR单片机通用I/O口的基本结构示意图。从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=ABCD)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。 方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。 当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚(图6-2)。AVR的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚
[单片机]
AVR--<font color='red'>IO</font>结构分析
IO-Link和SIO模式收发器推动传感器领域工业4.0革命
1.前言    今天在全球范围内以应用智能信息、通信技术和物联网(IoT)重新定义制造业的工业革命正在逐渐形成,德国政府称之为:“ 工业4.0 ”。   “工业4.0”的基本原则是通过连接机器、工件和控制系统,在整个价值链上下游之间构建自动互控的智能网络。通过整合信息通信、传感器和机器人技术构建物联网,工业4.0概念可提高工业制造的智能化水平。   在传感器技术领域, IO-Link 是全球首个传感器和致动器标准化输入输出通信技术(IEC 61131-9),因此,我们认为该标准可能被选为工业4.0标准通信接口。    这种强大的点对点通信基于成熟的传感器和致动器三线通信技术,对线材没有任何额外的要求。因此,IO-Link不是Fie
[嵌入式]
Atmega16在开关磁阻电机调速系统中的应用
摘要:针对开关磁阻电机调速系统的设计要求,提出了以Atmega16作为CPU,并利用该单片机硬件和软件上的优点来提高系统处理速度,简化外围电路和提高性价比的设计方法。 关键词:电机调速;开关磁阻电机;标准单脉冲数;Atmega16 1 引言 目前,随着汽车工业的发展,能源短缺问题日趋严峻。为此,国家科技部启动了“863电动汽车重大专项”,而开关磁阻电机(Switched Reluctance Motor,简称SRM)以其启动转矩大、调速范围宽等优点被作为未来电动汽车的理想驱动电机之一。开关磁阻电机是一种必须在控制器协调控制下才能运转起来的电机,因而控制器性能的好坏直接影响电机的运转性能。以往控制系统所采用的CPU主要有三种
[应用]
STM32 JNTRST JTDI JTDO引脚用做普通IO方法
STM32默认启动时PB4、PB3、PA15三个引脚不是普通IO,而是JTAG的复用功能,分别为JNTRST、JTDI、JTDO。 当我们试用SWD接口调试仿真时,这三个引脚可以用作普通IO。 具体做法就是禁用JTAG功能。只需使用以下语句即可。 #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*! JTAG-DP Disabled and SW-DP Enabled */ GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); /*使能SWD 禁用JTAG*/
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved