• A49 - ESP8266建立AP传输XPT2046AD数据WIFI模块


    任务

    1. 使用XPT2046读取多路温度数据
    2. 使用WIFI模块ESP8266进行无线通信,本次使用的模块是【正点原子】WIFI模块ATK-ESP8266,(ESP8266通用,无非是模块的连接电路简单了)。
    3. 使用LCD显示
    4. 手机能连接WiFi模块发出的AP进行通信

    效果

    在这里插入图片描述
    在这里插入图片描述

    ESP8266使用

    AP模式
    (AP 模式:ESP8266 模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。)

    AT+CWMODE=2                     //2是AP模式
    AT+RST                     //重新启动wifi模块
    AT+CWSAP="WIFI名称","WIFI密码",11,0          //AP模式设置模块WIFI名称及密码和加密方式,0代表开放,不需要密码
    AT+CIPMUX=1                   //设置多客户端连接
    AT+CIPSERVER=1,5000                //设置服务器的端口号为5000
    AT+CIPSTO=0                //服务不超时
    在AP模式时,手机要连接模块自身的WiFi,再验证模块自身的IP地址和端口号才能成功。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    嵌入式端程序如:

    	SENT_At("AT\r\n");
    	Delay(100);
    	
    	SENT_At("AT+RESTORE\r\n");//恢复出厂设置
    	Delay(2000);
    	
    	SENT_At("AT+RST\r\n");//重启
    	Delay(1000);
    	
    	SENT_At("AT+CWMODE=2\r\n");//设置AP模式
    	Delay(1000);
    	
    	SENT_At("AT+RST\r\n");//重启
    	Delay(1000);
    	
    	SENT_At("AT+CWSAP=\"ESP8266\",\"12345678\",11,3\r\n");   //AP模式设置模块WIFI名称及密码和加密方式,0代表开放,不需要密码,
    	Delay(1000);
    	
    	
    	SENT_At("AT+CIPMUX=1\r\n");//多连接模式
    	Delay(1000);
    
    	SENT_At("AT+CIPSERVER=1,5000\r\n");//设置端口号
    	Delay(1000);
    
    	SENT_At("AT+CIPSTO=0\r\n");//服务不超时
    	Delay(1000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    发送数据:

    SENT_At("AT+CIPSEND=0,8\r\n");  //!!!注意的是发送字节中带结束符\0;故T:023.1加一个结束符共8个要发送的字符
    
    printf("T1:%03u.%01u\r\n",((unsigned int)int_v1_1)%1000,((unsigned int)v1_1)%10);
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    源程序

    主程序

    /*******************************************************************************
    
    \* 文件名称:ESP8266建立AP传输XPT2046AD数据WIFI模块
    
    \* 实验目的:1.
    
    \* 2.
    
    \* 程序说明:完整程序Q:277 227 2579;@: itworkstation@ hotmail.com
    
    \* 日期版本:本项目分享关键细节,熟悉使用单片机的可做参考代码。完整讲解+源代码工程可联系获取,可定制。
    
    *******************************************************************************/
    #include "reg52.h"
    #include "LCD1602.h"
    #include "Delay.h"
    #include "XPT2046.h"	
    #include 
    #include 
    #include "wireless.h"
    
    sbit K1=P2^1;  //+
    sbit K2=P2^0;  //-
    sbit led1=P1^7; //RED
    sbit led2=P1^5; //GREEN
    
    
    //      8位AD	           12位AD
    // AIN0(XP):0x9C;		 	 	 0x94;		 H1			   AIN0 外部输入
    // AIN1(YP):0xDC;		 	   0xD4;		 H2			   AIN1 外部输入
    // AIN2(VBAT):0xAC;		   0xA4;		 H5			   AIN2 外部输入
    // AIN3(AUX):0xEC;		   0xE4;		 H3			   AIN3 外部输入
    
    double datapros_1()		//双精度浮点型
    {
    	u16 U0,n,sum,max,min;
    	double V1,Rpt;
    	   sum=0; max=0;min=0;
    //		U0 = Read_AD_Data(0x94);		//   AIN0 外部输入		
    //		U0 = Read_AD_Data(0xD4);		//   AIN1 外部输入		
    //		U0 = Read_AD_Data(0xA4);		//   AIN2 外部输入		
    //		U0 = Read_AD_Data(0xE4);		//   AIN3 外部输入	
    	for(n=0;n<=9;n++)
    		{	
    			U0 = Read_AD_Data(0x94);	
    	 		sum=sum+U0;
    			if(n==0){max=U0;min=U0;}
    			if(U0>max) max=U0;
    			if(U0<min) min=U0;	
    		}
    
    		U0=(sum-max-min)/8;
    
    	V1=(double)(U0+7293)/51;
    	Rpt=(double)2000*V1/(3000-V1);
    
    	return Rpt;
    	
    }
    
    double datapros_2()		//双精度浮点型
    {
    	u16 U0,n,sum,max,min;
    	double V1,Rpt;
    
    	   sum=0; max=0;min=0;
    //		U0 = Read_AD_Data(0x94);		//   AIN0 外部输入		 H1
    //		U0 = Read_AD_Data(0xD4);		//   AIN1 外部输入		 H2
    //		U0 = Read_AD_Data(0xA4);		//   AIN2 外部输入		 H5
    //		U0 = Read_AD_Data(0xE4);		//   AIN3 外部输入		 H3
    	for(n=0;n<=9;n++)
    		{	
    			U0 = Read_AD_Data(0xD4);	
    	 		sum=sum+U0;
    			if(n==0){max=U0;min=U0;}
    			if(U0>max) max=U0;
    			if(U0<min) min=U0;	
    		}
    
    		U0=(sum-max-min)/8;
    
    	V1=(double)(U0+7293)/51;
    	Rpt=(double)2000*V1/(3000-V1);
    
    	return Rpt;
    	
    }
    //==================================333333333333==============================================
    
    double datapros_3()		//双精度浮点型
    {
    	u16 U0,n,sum,max,min;
    	double V1,Rpt;
    	sum=0; max=0;min=0;
    //		U0 = Read_AD_Data(0x94);		//   AIN0 外部输入		 H1
    //		U0 = Read_AD_Data(0xD4);		//   AIN1 外部输入		 H2
    //		U0 = Read_AD_Data(0xA4);		//   AIN2 外部输入		 H5
    //		U0 = Read_AD_Data(0xE4);		//   AIN3 外部输入		 H3
    	for(n=0;n<=9;n++)
    		{	
    			U0 = Read_AD_Data(0xE4);	
    	 		sum=sum+U0;
    			if(n==0){max=U0;min=U0;}
    			if(U0>max) max=U0;
    			if(U0<min) min=U0;	
    		}
    
    		U0=(sum-max-min)/8;
    
    
    	V1=(double)(U0+7293)/51;
    	Rpt=(double)2000*V1/(3000-V1);
    
    	return Rpt;
    	
    }
    //============================================================================================
    void Set_Tempmax()
    {
    	if(K1==0)
    	Delay(10);
    	if(K1==0)	
    		{
    			Tempmax++;LCD_ShowNum(2,10,Tempmax,3);  	
    			while(!K1);
    		}
    	 if(K2==0)
      	 Delay(10);
    	 if(K2==0)
    		{	
    			Tempmax--;LCD_ShowNum(2,10,Tempmax,3);  	
    			while(!K2); 
    		}
    }
    
    #define FOSC 11059200L      //System frequency
    #define BAUD 115200       //UART baudrate
    
    void UsartInit()
    {
    	SCON = 0x50;            //8-bit variable UART
    	TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
    	TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
    	T2CON = 0x34;           //Timer2 start run
    	ES = 1;                 //Enable UART interrupt
      EA = 1;                 //Open master interrupt switch
    }
    void  delay_ms(unsigned int ms)
    {
         unsigned int i;
    	 do{
    	      i = 125;  //测试,12M / 126 ~ 1ms
    		  while(--i)	;   //12T per loop
         }while(--ms);
    }
    void WIFI_Init()//通过单片机配置AT指令
    {
    	printf("AT\r\n");
    	Delay(100);
    	
    	printf("AT+RESTORE\r\n");//恢复出厂设置
    	Delay(2000);
    	
    	printf("AT+RST\r\n");//重启
    	Delay(1000);
    	
    	printf("AT+CWMODE=2\r\n");//设置AP模式
    	Delay(1000);
    	
    	printf("AT+RST\r\n");//重启
    	Delay(1000);
    	
    	printf("AT+CWSAP=\"ESP8266\",\"12345678\",11,3\r\n");   //AP模式设置模块WIFI名称及密码和加密方式,0代表开放,不需要密码,
    	Delay(1000);
    	
    	
    	printf("AT+CIPMUX=1\r\n");//多连接模式
    	Delay(1000);
    
    	printf("AT+CIPSERVER=1,5000\r\n");//设置端口号
    	Delay(1000);
    
    	printf("AT+CIPSTO=0\r\n");//服务不超时
    	Delay(1000);
    
    }
    u8 idata point2 = 0;
    void WIRELESS_RecHandle(u8 Res)
    {
    	if(WIRELESS_Data.isGetData == FALSE)
    	{
    		if(Res == '$')
    		{
    			point2 = 0;	
    		}
    		WIRELESS_RX_BUF[point2++] = Res;
    		if(Res == '@')									   
    		{
    			WIRELESS_Data.isGetData = TRUE; 
    			point2 = 0;
    		}		
    		if(point2 >= WIRELESS_Buffer_Length)
    		{
    			point2 = 0;
    		}
    	}	
    }
    
    bit busy=0;
    void Usart_SendByte(u8 DAT)
    {
    	while(busy);           //Wait for the completion of the previous data is sent
    	busy = 1;
    	SBUF = DAT;
    }
    
    void Uart_Isr() interrupt 4
    {
    	u8 res=0;
    	if(RI)
    	{
    		RI=0;  //SBUF
    		res = SBUF;
    		WIRELESS_RecHandle(res);
    	}
    	if (TI)
    	{
    			TI = 0;             //Clear transmit interrupt flag
    			busy = 0;           //Clear transmit busy flag
    	}
    }
    
    // printf函数在格式化输出时,向下调用了char putchar(char c);这个函数,在“stdio.h”里可以发现有这个函数
    char putchar(char c)//重定向
    {
    	Usart_SendByte(c);
    
    	return c;
    }
    
    u8 flag_zd=0;
    
    
    void main()
    {
    	double R_1,R_2,R_3=0;
    	unsigned int int_R_1,int_R_2,int_R_3;
    	unsigned int folat_R_1,folat_R_2,folat_R_3;
    	double v1_1,v1_2,v1_3=0;
     	unsigned int int_v1_1,int_v1_2,int_v1_3;
    
    	uint count_send=0;
    	LCD_Init();						//LCD初始化
    	LCD_ShowString(1,1,"1:");
    	LCD_ShowString(1,9,"2:");
    	LCD_ShowString(2,1,"3:");
    
    	LCD_ShowNum(2,10,Tempmax,3);  
    	
    	WIRELESS_Clear_Data();
    	UsartInit();	
    	WIFI_Init();
    	
    	
    	led1=1;  //RED
    	led2=1;  //GREEN
    	while(1)
    	{
    		parseWIRELESSBuffer();
    //----------------------------------------------------------------------------------
    //	printf("AT+CIPSEND=0,4\r\n");  //发送4字节到连接ID为0的远端
    //	SBUF=1234;
    	
    //	printf("AT+CIPSEND=0,8\r\n");  //!!!注意的是发送字节中带结束符\0;故T:023.1加一个结束符共8个要发送的字符
    //	printf("T1:%03u.%01u\r\n",((unsigned int)int_v1_1)%1000,((unsigned int)v1_1)%10);
    //	
    //	delay_ms(100);	
    //	printf("AT+CIPSEND=0,8\r\n");
    //	printf("T2:%03u.%01u\r\n",((unsigned int)int_v1_2)%1000,((unsigned int)v1_2)%10);
    //	
    //	delay_ms(100);
    //	printf("AT+CIPSEND=0,8\r\n");
    //	printf("T3:%03u.%01u\r\n",((unsigned int)int_v1_3)%1000,((unsigned int)v1_3)%10);
    		
    	delay_ms(1);
    	count_send++;
    	if(count_send>3000)
    	{
    		count_send = 0;
    		
    		R_1=datapros_1();	 //数据处理函数
    		int_R_1=R_1;
    		v1_1=R_1*R_1*0.02268-R_1*1.591-66.03;  					
    		R_1=R_1*100;
    		folat_R_1=(unsigned int)R_1%100;
    		int_v1_1=v1_1;
    		LCD_ShowNum(1,3,int_v1_1,3);	 //整数部分三位 个十百
    		LCD_ShowChar(1,6,'.');
    		v1_1=v1_1*100;
    		folat_R_1=(unsigned int)v1_1%100;
    		LCD_ShowNum(1,7,v1_1,1);
    	
    //2------------------------------------------------------------------------------
    
    		R_2=datapros_2();	 //数据处理函数
    		int_R_2=R_2;
    		v1_2=R_2*R_2*0.01966-R_2*0.8925-104;  					
    		R_2=R_2*100;
    		folat_R_2=(unsigned int)R_2%100;
    		int_v1_2=v1_2;
    		LCD_ShowNum(1,11,int_v1_2,3);	 //整数部分三位 个十百
    		LCD_ShowChar(1,14,'.');
    		v1_2=v1_2*100;
    		folat_R_2=(unsigned int)v1_2%100;
    		LCD_ShowNum(1,15,v1_2,1);
    
    //--------------------------------33333333333333----------------------------------------------
    
    		R_3=datapros_3();	 //数据处理函数
    		int_R_3=R_3;
    		v1_3=R_3*R_3*0.02113-R_3*1.313-78.69;  					
    		R_3=R_3*100;
    		folat_R_3=(unsigned int)R_3%100;
    		int_v1_3=v1_3;
    		LCD_ShowNum(2,3,int_v1_3,3);	 //整数部分三位 个十百
    		LCD_ShowChar(2,6,'.');
    		v1_3=v1_3*100;
    		folat_R_3=(unsigned int)v1_3%100;
    		LCD_ShowNum(2,7,v1_3,1);
    		
    		printf("AT+CIPSEND=0,8\r\n");  //!!!注意的是发送字节中带结束符\0;故T:023.1加一个结束符共8个要发送的字符
    		delay_ms(100);	
    		printf("T1:%03u.%01u\r\n",((unsigned int)int_v1_1)%1000,((unsigned int)v1_1)%10);
    		
    		delay_ms(100);	
    		printf("AT+CIPSEND=0,8\r\n");
    		delay_ms(100);	
    		printf("T2:%03u.%01u\r\n",((unsigned int)int_v1_2)%1000,((unsigned int)v1_2)%10);
    		
    		delay_ms(100);
    		printf("AT+CIPSEND=0,8\r\n");
    		delay_ms(100);	
    		printf("T3:%03u.%01u\r\n",((unsigned int)int_v1_3)%1000,((unsigned int)v1_3)%10);
    		delay_ms(100);	
    	}
    
    	
    		Set_Tempmax();
    		if(int_v1_1>=Tempmax)
    		{
    			led1=0;
    			led2=1;
    			flag_zd = 1;
    			jidianqi=0;
    		}
    		else if(int_v1_1<Tempmax)
    		{
    			led1=1;
    			led2=0;
    			flag_zd = 0;			
    		}
    		if(flag_zd || flag_sd)
    		{
    			jidianqi=0;
    		}
    		else
    		{
    			jidianqi=1;
    		}
    	}
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373

    WiFi驱动

    #ifndef __WIRELESS_h
    #define __WIRELESS_h
    
    #include "reg52.h"
    #include 
    #include 
    
    #define FALSE 0
    #define TRUE 1
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    #define WIRELESS_Buffer_Length 30
    #define WIRELESS_Length 30
    
    sbit jidianqi=P1^4; //继电器
    
    extern idata unsigned int Tempmax;
    extern u8 flag_sd;
    
    typedef struct
    {
    	u8 isGetData;		//是否获取到数据
    	u8 isParseData;	//是否解析完成
    	u8 isUsefull;		//信息是否有效
    	
    } _WIRELESSData;
    extern _WIRELESSData WIRELESS_Data;
    extern char idata WIRELESS_RX_BUF[WIRELESS_Buffer_Length]; 
    
    void WIRELESS_RecHandle(u8 Res);
    
    void WIRELESS_Clear_Data(void);
    
    void parseWIRELESSBuffer(void);
    
    
    
    #endif 
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    #include "wireless.h"
    #include "LCD1602.h"
    u8 flag_sd=0;
    
    _WIRELESSData WIRELESS_Data;
    char idata WIRELESS_RX_BUF[WIRELESS_Buffer_Length]; //接收缓冲,最大WIRELESS_Buffer_Length个字节.末字节为换行符 
    
    idata unsigned int Tempmax=30;
    void WIRELESS_Clear_Data(void)
    {
    	WIRELESS_Data.isGetData = FALSE;
    	WIRELESS_Data.isParseData = FALSE;
    	WIRELESS_Data.isUsefull = FALSE;
    	
    	memset(WIRELESS_RX_BUF, 0, WIRELESS_Buffer_Length);      //清空
    }
    u8 WIRELESS_Find(char *a)                   // 串口命令识别函数
    { 
      if(strstr(WIRELESS_RX_BUF,a)!=NULL)
    	    return 1;
    	else
    		return 0;
    }
    void parseWIRELESSBuffer(void)
    {
    	u16 bai=0,shi=0,ge=0;
    	if (WIRELESS_Data.isGetData)  //获得模块的数据 --- $D1@   : $D4@
    	{
    		WIRELESS_Data.isGetData = FALSE;
    		ES = 0;
    		if(WIRELESS_Find("$on@"))
    		{
    			WIRELESS_Data.isParseData = TRUE;
    			WIRELESS_Data.isUsefull = TRUE;	
    			
    			jidianqi = 0;
    			flag_sd=1;
    //			LCD_ShowString(2,14,"1");
    //			printf("AT+CIPSEND=0,2\r\n");
    //			printf("r1\r\n");
    		}
    		else if(WIRELESS_Find("$off@"))
    		{
    			WIRELESS_Data.isParseData = TRUE;
    			WIRELESS_Data.isUsefull = TRUE;	
    			
    			jidianqi = 1;
    			flag_sd=0;
    //			LCD_ShowString(2,14,"0");
    //			printf("AT+CIPSEND=0,2\r\n");
    //			printf("r0\r\n");
    		}
    		else if(WIRELESS_RX_BUF[1]=='t')
    		{
    			WIRELESS_Data.isParseData = TRUE;
    			WIRELESS_Data.isUsefull = TRUE;	
    			
    			bai = (WIRELESS_RX_BUF[2]-0x30);
    			shi = (WIRELESS_RX_BUF[3]-0x30);
    			ge = (WIRELESS_RX_BUF[4]-0x30);
    			if(bai<10 && shi<10 && ge<10)
    			{
    				Tempmax = bai*100+shi*10+ge;
    				LCD_ShowNum(2,10,Tempmax,3);  
    			}
    		}
    		else
    		{
    			WIRELESS_Clear_Data(); //清空接收到的数据---数据帧无效
    		}
    		
    		ES = 1;
    	}
    }
    
    /*******************参考处理设计,自行添加内容*****************************
    void Proc_Bluethooth(void)
    {
    	parseWIRELESSBuffer();
    	if(WIRELESS_Data.isUsefull == TRUE)
    	{
    		WIRELESS_Data.isUsefull = FALSE;
    
    
    	}
    }
    ************************************************/
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    XPT2046驱动

    #ifndef	  __XPT2046_H_
    #define   __XPT2046_H_
    
    //---包含头文件---//
    #include
    #include
    
    //---重定义关键词---//
    #ifndef uchar
    #define uchar unsigned char
    #endif
    
    #ifndef uint
    #define uint  unsigned int
    #endif
    
    #ifndef ulong
    #define ulong  unsigned long
    #endif
    
    //---定义使用的IO口---//
    sbit DOUT = P3^7;	  //输出
    sbit CLK  = P3^6;	  //时钟
    sbit DIN  = P3^4;	  //输入
    sbit CS   = P3^5;	  //片选
    
    uint Read_AD_Data(uchar cmd);
    uint SPI_Read(void);
    void SPI_Write(uchar dat);
    
    #endif
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    #include "XPT2046.h"
    /****************************************************************************
    *函数名:TSPI_Start
    *输  入:无
    *输  出:无
    *功  能:初始化触摸SPI
    ****************************************************************************/
    
    //void SPI_Start(void)
    //{
    //	CLK = 0;
    //	CS  = 1;
    //	DIN = 1;
    //	CLK = 1;
    //	CS  = 0;		
    //}
    /****************************************************************************
    *函数名:SPI_Write
    *输  入:dat:写入数据
    *输  出:无
    *功  能:使用SPI写入数据
    ****************************************************************************/
    
    void SPI_Write(uchar dat)
    {
    	uchar i;
    	CLK = 0;
    	for(i=0; i<8; i++)
    	{
    		DIN = dat >> 7;  	//放置最高位
    		dat <<= 1;
    		CLK = 0;			//上升沿放置数据
    
    		CLK = 1;
    
    	}
    }
    /****************************************************************************
    *函数名:SPI_Read
    *输  入:无
    *输  出:dat:读取 到的数据
    *功  能:使用SPI读取数据
    ****************************************************************************/
    
    uint SPI_Read(void)
    {
    	uint i, dat=0;
    	CLK = 0;
    	for(i=0; i<12; i++)		//接收12位数据
    	{
    		dat <<= 1;
    
    		CLK = 1;
    		CLK = 0;
    
    		dat |= DOUT;
    
    	}
    	return dat;	
    }
    
    /****************************************************************************
    *函数名:Read_AD_Data
    *输  入:cmd:读取的X或者Y
    *输  出:endValue:最终信号处理后返回的值
    *功  能:读取触摸数据
    ****************************************************************************/
    uint Read_AD_Data(uchar cmd)
    {
    	uchar i;
    	uint AD_Value;
    	CLK = 0;
    	CS  = 0;
    	SPI_Write(cmd);
    	for(i=6; i>0; i--); 	//延时等待转换结果
    	CLK = 1;	  //发送一个时钟周期,清除BUSY
    	_nop_();
    	_nop_();
    	CLK = 0;
    	_nop_();
    	_nop_();
    	AD_Value=SPI_Read();
    	CS = 1;
    	return AD_Value;	
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
  • 相关阅读:
    42.接雨水--dp版本
    域渗透-横向移动命令总结
    Flink: Only supported for operators
    Ubuntu下运行QEMU模拟riscv64跑Debian
    Android ADB 常用命令及详解
    shiro授权
    redis常用存储结构
    内存卡中毒了格式化能解决吗?这样清除病毒更有效
    力扣(LeetCode)322. 零钱兑换(2022.11.19)
    VRPTW(MATLAB):淘金优化算法GRO求解带时间窗的车辆路径问题VRPTW(提供参考文献及MATLAB代码)
  • 原文地址:https://blog.csdn.net/qq_20467929/article/details/126118035