⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttx.h

📁 我用AVR读取触摸屏
💻 H
字号:
#include <iom32.h>
//清0和置1
#define set_0 0x01 
#define set_1 0x02
#define set_2 0x04 
#define set_3 0x08 
#define set_4 0x10 
#define set_5 0x20
#define set_6 0x40 
#define set_7 0x80 
#define clr_0 0xfe 
#define clr_1 0xfd 
#define clr_2 0xfb
#define clr_3 0xf7
#define clr_4 0xef 
#define clr_5 0xdf 
#define clr_6 0xbf 
#define clr_7 0x7f 
#define set_8 0X100 
#define clr_8 0XFEFF
#define set_9 0X200
#define clr_9 0XFDFF
#define set_10 0X400 
#define clr_10 0XFBFF
#define set_11 0X800
#define clr_11 0XF7FF

#define set_12 0X1000 
#define clr_12 0XEFFF
#define set_13 0X2000
#define clr_13 0XDFFF
#define set_14 0X4000 
#define clr_14 0XBFFF
#define set_15 0X8000 
#define clr_15 0X7FFF
//通讯状态
#define ckx 0                       //空闲
#define cfsygsj 1                   //发送一个数据
#define cjsygsj 2                   //接收一个数据  
#define cfsyzsj 3                   //发送一组数据
#define cjsyzsj 4                   //接收一组数据  
//数据状态 
#define csjkx 0						//数据空闲
#define cdtcjkx 1					//等待从机接收
#define cdtzjkx 2					//等待主机接收
#define cqssj 0xa5                  //起始数据  
#define cjssj 0xaa                  //结束数据  
#define ctxwxysj 250                //通讯无响应时间
class Ttx
{
	public:
      Ttx(void);							//构造函数
	  void hstx(void);	//公有函数通讯
    public:
		unsigned char qztxkzt;          //公有变量通讯状态  
		unsigned char qztxfshcq[128];   //公有变量通讯发送缓冲区
		unsigned char qztxjshcq[128];   //公有变量通讯接收缓冲区
		unsigned char qzfswz;           //公有变量发送位置 
		unsigned char qzjswz;           //公有变量接收位置    
	private:
	  unsigned char qzfsjscf;         	//私有重复发送接收一个字节
	  unsigned char qztxwxysj;       	//私有通讯无响应时间
      unsigned char qzsjzt;			    //数据状态 
	  unsigned char qzyxy;				//已响应
	private: 
	  void hsfswsjcl(void);				//私有函数发送完数据处理
	  void hsjswsjcl(void);				//私有函数接收完数据处理
	  void hscjjs(unsigned char *fhsj); //私有函数从机接收
	  void hszjfs(unsigned char *fhsj); //私有函数主机发送
};
//通讯状态
#define ckx 0                       //空闲
#define cfs 1                       //发送
#define cjs 2                       //接收   
#define cqssj 0xa5                  //起始数据  
#define cjssj 0xaa                  //结束数据  
//数据状态 
#define csjkx 0						//数据空闲
#define cdtjsxy 1					//等待接收响应
#define cdtjsyxy 2                  //等待接收已响应
#define ctxwxysj 250                //通讯无响应时间
//
#define tx_datai PIND
#define tx_datao PORTD
#define tx_DDRI DDRD = 0X00
#define tx_DDRO DDRD = 0XFF
#define tx_ai   DDRC&=clr_6
#define qs_tx_a (PINC&set_6)
#define tx_al   PORTC |= set_6
#define tx_bo   DDRC|=set_7
#define clr_tx_b PORTC &= clr_7
#define set_tx_b PORTC |= set_7 
#define tx_bl   PORTC |= set_7
Ttx::Ttx(void)						//构造函数
{
    tx_DDRI;                        //数据口输入
    tx_al;
    tx_bl;                          //AB口上拉
    tx_ai;                         //AI
    tx_bo;                         //BO
    qzfsjscf = 0;         			//私有重复发送接收一个字节
	qzfswz = 0;           			//发送位置 
	qzjswz = 0;           			//接收位置 
	qztxkzt = 0;          			//通讯状态 
	qztxfshcq[0] = 0xa5; 				//通讯发送缓冲区
    qztxfshcq[3] = 0xaa;
	qztxjshcq[0] = 0; 				//通讯接收缓冲区
	qzsjzt = csjkx;					//数据状态空闲 
	qztxwxysj = ctxwxysj;       	//私有通讯无响应时间
	qzyxy = 0;						//已响应
}
void Ttx::hstx(void)				//公有函数通讯
{
   unsigned char txfhywsj;         //有无数据  
    if(qztxwxysj == 0)              //通讯无响应时间
    {
        qztxkzt = ckx;              //空闲
		qzsjzt = csjkx;				//数据状态空闲 
		qzyxy = 0;					//已响应
    }
    else
    {
        if(uc_t2msyd != 0)
        { 
            //--qztxwxysj;            //通讯无响应时间  
        }
    }
    switch(qztxkzt)                 //通讯状态  
    {
        case ckx:                   //空闲
        { 
       		qzfsjscf = 0;           //重复发送接收一个字节
            qzfswz = 0;             //发送位置 
            qzjswz = 0;             //接收位置 
			qzyxy = 0;					//已响应
            hscjjs(&txfhywsj);             	//从机接收
			if(qzsjzt == csjkx)			    		//数据状态空闲
			{
				if(qztxfshcq[qzfswz] == cqssj)    		//有发送起始数据
				{
					hszjfs(&qztxfshcq[qzfswz]);			//私有函数主机发送	
					qztxkzt = cfsygsj;                	//发送一个数据
				}
			}
			else
			{
			 	qztxkzt = cjsygsj;                		//接收一个数据	  	
			}
        }
        break;
		case cfsygsj:                 //发送一个数据
		{
		 	if((qzsjzt == csjkx)&&(qzyxy != 0))		  //数据状态空闲,已发送一个数据//已响应
			{
				qzyxy = 0;					//已响应
				if(qzfsjscf != 0)         		//重复发送接收一个字节
				{
					qzfsjscf = 0;         		//重复发送接收一个字节
					qztxkzt = cfsyzsj;      			//发送一组数据
				}
				else
				{
					qzfsjscf = 1;         				//重复发送接收一个字节
					hszjfs(&qztxfshcq[qzfswz]);	//私有函数主机发送
				}	
			}
			else
			{
				hszjfs(&qztxfshcq[qzfswz]);	//私有函数主机发送	
			}
		}
		break;
		case cjsygsj:                  //接收一个数据  
		{
			hscjjs(&txfhywsj);             	//从机接收
			if((qzsjzt == csjkx)&&(qzyxy != 0))		  //数据状态空闲,已接收一个数据//已响应
			{
				qzyxy = 0;						//已响应
				if(qzfsjscf != 0)         		//重复发送接收一个字节
				{
					qzfsjscf = 0;         		//重复发送接收一个字节
					if(qztxjshcq[qzjswz] == txfhywsj)       //保存数据  
            		{
						qztxkzt = cjsyzsj;    		//接收一组数据
					}
					else
					{
						qztxkzt = ckx;          //空闲
					}
				}
				else
				{
					qzfsjscf = 1;         				//重复发送接收一个字节
					qztxjshcq[qzjswz] = txfhywsj;       //保存数据
				}                     
			}
		}
		break;
        case cfsyzsj:                       //发送一组数据 
        {
			qzyxy = 0;					//已响应
			if(qzfswz <127)             //发送位置 
            { 
				++qzfswz;					//发送位置 
				if(qztxfshcq[qzfswz] != cjssj)	//结束数据 
				{
					hszjfs(&qztxfshcq[qzfswz]);	//私有函数主机发送
					qztxkzt = cfsygsj;                //发送一个数据
				}
				else
				{
					hsfswsjcl();				//私有函数发送完数据处理
				}	
			}
			else
			{
			  	qztxkzt = ckx;          //空闲
			}
        }
        break;
        case cjsyzsj:                       //接收一组数据 
        {  
            qzyxy = 0;					//已响应
			if(qzjswz <127)             //接收位置 
            { 
                if(qztxjshcq[0] == cqssj)     //接收起始数据 
                {
     				if(qztxjshcq[qzjswz] == cjssj)          //结束数据 
   					{   
           	 			++qzjswz;           //接收位置 
						qztxkzt = cjsygsj;               //接收一个数据 
						hscjjs(&txfhywsj);             	//从机接收    
               		} 
              		else
             		{ 
            			hsjswsjcl();		//私有函数接收完数据处理
              		}
         		} 
             	else
				{
					qztxkzt = ckx;          //空闲
				}
            }
            else
            {  
                qztxkzt = ckx;          //空闲
            }
        }
        break;
    }
}
void Ttx::hsfswsjcl(void)				//私有函数发送完数据处理
{
}
void Ttx::hsjswsjcl(void)				//私有函数接收完数据处理
{
}
/*查讯方式时,A,B可以都是普通IO口,中断方式时,主机A和从机B都要是下降延中断口
协议:通讯线,A,B,DATA ,
主机:A,主机发送信号线,B主机接收信号线。
从机:A,从机接收信号线,B从机发送信号线。
空闲:A,B,都为高电平
主机发送数据:送DATA,A,置低等待,B变低,A,置高,等待B变高,重复送DATA。
从机接收数据:检测到A变低,读DATA数据,B,置低,等待A变高,B,置高,
传送值:*fhsj接收数据的返回数据
返回值:ywsj有无数据,0无数据,1有数据,2错误
*/
void Ttx::hscjjs(unsigned char *fhsj) //私有函数从机接收
{
    tx_DDRI;                        //数据口输入
    tx_al;                          //AB口上拉
    tx_ai;                         //AI
    tx_bo;                         //BO
    if(qzsjzt == csjkx)			    //数据状态空闲
    {
        set_tx_b;
		if(qs_tx_a == 0)            //有主机信号
        {
            *fhsj = tx_datai;
            clr_tx_b;               //置已收到主机数据标志
            qztxwxysj = ctxwxysj;   //通讯无响应时间
            qzsjzt = cdtjsxy;       //数据状态等待接收响应
			qzyxy = 1;				//已响应
        }
    }
    else
    {
        if(qs_tx_a != 0)            //主机已响应
        {
            set_tx_b;               //置已收到主机响应标志   
            qztxwxysj = ctxwxysj;   //通讯无响应时间
            qzsjzt = csjkx;			//数据状态空闲
        }
    }
}
/*查讯方式时,A,B可以都是普通IO口,中断方式时,主机A和从机B都要是下降延中断口
协议:通讯线,A,B,DATA ,
主机:A,主机发送信号线,B主机接收信号线。
从机:A,从机接收信号线,B从机发送信号线。
空闲:A,B,都为高电平
主机发送数据:送DATA,A,置低等待,B变低,A,置高,等待B变高,重复送DATA。
从机接收数据:检测到A变低,读DATA数据,B,置低,等待A变高,B,置高,
传送值:*fhsj接收数据的返回数据
返回值:ywsj有无数据,0无数据,1有数据,2错误
*/
void Ttx::hszjfs(unsigned char *fhsj) //私有函数主机发送
{
    tx_DDRO;                        //数据口输出
    tx_al;                          //AB口上拉
    tx_ai;                         //AI
    tx_bo;                         //BO
	if(qzsjzt == csjkx)			//数据状态空闲
    {
        if(qs_tx_a != 0)        //从机已空闲
	    {
	        tx_datao = *fhsj;			//输出数据
	        clr_tx_b;       		//置从机接收
            qzsjzt = cdtjsxy;       //数据状态等待接收响应
			qzyxy = 1;					//已响应
	    }
    }
    else
    {
        if(qzsjzt == cdtjsxy)       //数据状态等待接收响应
        {
            if(qs_tx_a == 0)        //从机已接收
	        {
	  	        set_tx_b;       	//置从机接收
                qzsjzt = cdtjsyxy;  //等待接收已响应
            }
        }
        else
        {
            if(qs_tx_a != 0)        //从机已接收
	        {
	  	        qzsjzt = csjkx;		//数据状态空闲
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -