论坛元老
 
- 积分
- 4090
- 金钱
- 4090
- 注册时间
- 2012-10-21
- 在线时间
- 642 小时
|
10金钱
本帖最后由 PCA 于 2016-3-11 08:54 编辑
触摸程序还是使用原子的程序,把原来的模拟SPI改成了硬件SPI修改了下面这个读取函数
u16 ADS_Read_AD(u8 CMD)
{
u16 Num=0;
SPIx_SetSpeed(SPI_BaudRatePrescaler_256);
TCS=0;
delay_us(3);
SPIx_ReadWriteByte(CMD);
delay_us(6);
Num=SPIx_ReadWriteByte(0);
Num<<=8;
Num=Num|SPIx_ReadWriteByte(0);
Num>>=4;
TCS=1;
SPIx_SetSpeed(2);
return(Num);
}
SPI程序段如下:
#include "spi.h"
SPI_InitTypeDef SPI_InitStructure;
void SPIx_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //éèÖÃSPIμ¥Ïò»òÕßË«ÏòμÄêy¾YÄ£ê½:SPIéèÖÃÎaË«ÏßË«Ïòè«Ë«1¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //éèÖÃSPI1¤×÷Ä£ê½:éèÖÃÎaÖ÷SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //éèÖÃSPIμÄêy¾Y′óD¡:SPI·¢Ëí½óêÕ8λ֡½á11
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //Ñ¡ÔñáË′®DDê±ÖóμÄÎèì¬:ê±ÖóDü¿Õ¸ß
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //êy¾Y2¶»ñóúμú¶t¸öê±ÖóÑØ
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSSDÅoÅóéó2¼t£¨NSS1ü½Å£©»1êÇèí¼t£¨ê1óÃSSI룩1üàí:Äú2¿NSSDÅoÅóDSSIλ¿ØÖÆ
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //¶¨òå2¨ìØÂêÔ¤·ÖÆμμÄÖμ:2¨ìØÂêÔ¤·ÖÆμÖμÎa256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //Ö¸¶¨êy¾Y′«êä′óMSBλ»1êÇLSBλ¿aê¼:êy¾Y′«êä′óMSBλ¿aê¼
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRCÖμ¼ÆËãμĶàÏîê½
SPI_Init(SPI1, &SPI_InitStructure); //¸ù¾YSPI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèSPIx¼Ä′æÆ÷
SPI_Cmd(SPI1, ENABLE); //ê1ÄüSPIíaéè
SPIx_ReadWriteByte(0xff);//Æô¶ˉ′«êä
}
void SPIx_SetSpeed(u8 SpeedSet)
{
SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1,ENABLE);
}
//SPIx ¶áD′ò»¸ö×Ö½ú
//TxData:òaD′èëμÄ×Ö½ú
//·μ»ØÖμ:¶áè¡μ½μÄ×Ö½ú
u8 SPIx_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //¼ì2éÖ¸¶¨μÄSPI±ê־λéèÖÃóë·ñ:·¢Ëí»o′æ¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI1, TxData); //í¨1yíaéèSPIx·¢Ëíò»¸öêy¾Y
retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //¼ì2éÖ¸¶¨μÄSPI±ê־λéèÖÃóë·ñ:½óêü»o′æ·Ç¿Õ±ê־λ
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI1); //·μ»Øí¨1ySPIx×î½ü½óêÕμÄêy¾Y
}
只要一读取触摸屏是数据程序就停在那里不走了
while(1)
{
Read_ADS2(&Pen_Point.X,&Pen_Point.Y);
LCD_ShowNum(40+24,40,Pen_Point.X,4,16); //ÏÔê¾êyÖμ
LCD_ShowNum(40+24+80,40,Pen_Point.Y,4,16); //ÏÔê¾êyÖμ
showhanzi32(168,232,3);
delay_ms(500);
LCD_Clear(WHITE);
}
哪位大侠帮帮在下
|
|