您好,欢迎访问三七文档
voidDelay_Display()//1us延时,12.3M频率{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}/*******************************启动TA1820程序*******************************/bitStart_TA1820()//ta1820发送启动信号{p_Dio=1;Delay_Display();p_CLK=1;//由于是由IC控制,不出现CLK无法拉高现象Delay_Display();if(p_Dio==0){returnBusy;}Delay_Display();p_Dio=0;//CLK为高电平期间,DIO线由高变低,通信开始Delay_Display();p_CLK=0;returnTRUE;}/*******************************发送TA1820通信内容*******************************/bitWrite_TA1820(ucharTA1820_Cmd)//写入TA1820指令{uchari;p_CLK=0;//CLK置低,数据线开始变换Delay_Display();//延时,等待p_CLK为0P0CR|=0x01;//设置p_DIO为输出for(i=0;i8;i++){if(TA1820_Cmd&0x01){p_Dio=1;}else{p_Dio=0;}Delay_Display();//延时1us,等待数据建立p_CLK=1;//p_CLK为高,读取数据,脉冲宽度至少为1usDelay_Display();Delay_Display();p_CLK=0;Delay_Display();TA1820_Cmd=1;//通信数据,低位在前}//数据传输完成,等待应答确认,发出STOP信号P0CR&=0xfe;//,设置DIO线为输入,等待应答信号p_CLK=1;Delay_Display();Delay_Display();if(p_Dio==0){p_CLK=0;P0CR|=0x01;//设置p_DIO为输出returnTRUE;}else{p_CLK=0;P0CR|=0x01;//设置p_DIO为输出returnFALSE;}}/*******************************结束TA1820程序*******************************/voidStop_TA1820(){p_CLK=0;//拉低p_CLKDelay_Display();Delay_Display();p_Dio=0;//拉低p_DioDelay_Display();Delay_Display();p_CLK=1;Delay_Display();Delay_Display();p_Dio=1;//高电平时,IO线上升沿,通信结束}/*******************************读取TA1820按键*******************************/voidRead_TA1820(){uchari,b_Buff;P0CR&=0xfe;//初始化p_Dio为输入for(i=0;i8;i++){b_Buff=1;//数据移位次数为7次p_CLK=0;Delay_Display();Delay_Display();Delay_Display();Delay_Display();Delay_Display();Delay_Display();p_CLK=1;Delay_Display();Delay_Display();Delay_Display();Delay_Display();Delay_Display();Delay_Display();Delay_Display();if(p_Dio==1)//低位在前,{b_Buff|=0x80;}else{b_Buff&=0x7f;}Delay_Display();p_CLK=0;}b_Key_Value=b_Buff;//读取按键数据Delay_Display();p_CLK=1;Delay_Display();/*if(p_Dio==0){}*/Delay_Display();p_CLK=0;P0CR|=0x01;//回复p_Dio为输出}voidDisplay_Drive(){ucharb_Bit,i;b_Bit=Start_TA1820();if(b_Bit==0)//检测通信是否正忙{return;}Write_TA1820(0x40);//送地址自动增加显示//Write_TA1820(0x44);//送固定地址显示Stop_TA1820();Start_TA1820();Write_TA1820(0xc0);//地址命令,地址0//Write_TA1820(0xff);//送显示数据for(i=0;i6;i++)//送六个地址显示数据{Write_TA1820(b_Display[i]);}Stop_TA1820();Start_TA1820();Write_TA1820(0x8f);//显示控制命令Stop_TA1820();}voidKey_Scan(){Start_TA1820();Write_TA1820(0x42);//读按键数据命令Delay_Display();//延时Read_TA1820();//接收数据Stop_TA1820();}
本文标题:TA1820例程
链接地址:https://www.777doc.com/doc-1331436 .html