您的位置:首页 > 新闻 > 热点要闻 > 代做网站平台_苏州模板建站定制_公众号seo排名软件_长春网站建设平台

代做网站平台_苏州模板建站定制_公众号seo排名软件_长春网站建设平台

2024/12/23 1:50:31 来源:https://blog.csdn.net/xxxx123445/article/details/144219594  浏览:    关键词:代做网站平台_苏州模板建站定制_公众号seo排名软件_长春网站建设平台
代做网站平台_苏州模板建站定制_公众号seo排名软件_长春网站建设平台

一,ADC模数转换实验

        ADC(analog to digital converter)模数转换器,将模拟信号转化为数字信号,其中分辨率指的是:ADC能够分辨的最小模拟变化量,位越多越精细。比如对一个12位分辨率,参考电压为5V的ADC,其最小分辨电压=\frac{5}{2^{12}}即1.22mV电压。其中模拟量:模拟量是在时间和数值上都连续变化的物理量。数字量:数字量在时间和数值上都是离散的,通常用二进制代码表示。

        XPT2046芯片转换方式:逐次逼近型,N为位寄存器对于其最高的bit置1,到N位D/A转换器变为模拟信号,输入到比较器,比较器将U0与真实输入Ux模拟信号进行比较,如果Ux大于U0,通过逻辑控制电路将寄存器的这个最高位置1,然后依次对其余位进行操作,得到数字信号,放到输出缓冲区上。

   进行电位器电压采集,将寄存器设置为电位器电压采集模式0x94,还有其他基础设置,进行配置。然后按照时钟信号图,DIN为写入,DOUT为输出,CS片选信号,DCLK时钟信号。

xpt2046读写程序:

#include "xpt2046.h"
void xpt2046_write_byte(u8 dat)
{u8 i=0;CS=0;DCLK=0;_nop_();for(i=0;i<8;i++){DIN=dat>>7&0x01;dat<<=1;DCLK=1;_nop_();DCLK=0;_nop_();}
}u16 xpt2046_read_byte(void)
{u16 read_result=0,i=0;DCLK=0;_nop_();for(i=0;i<12;i++){	read_result<<=1;DCLK=1;_nop_();DCLK=0;_nop_();read_result|=DOUT;}return read_result;
}
u16 xpt2046_read_true(u8 adress)
{int i=0;u8 xpt2046_result=0;xpt2046_write_byte(adress);for(i=0;i<6;i++);DCLK=1;_nop_();DCLK=0;_nop_();xpt2046_result=xpt2046_read_byte();CS=1;return xpt2046_result;
}

总程序:

#include "smg.h"
#include "xpt2046.h"
void main(void)
{u8 result[8];u16 xpt2046_show=0;float final_result=0;while(1){final_result=5.0*xpt2046_read_true(0x94)/4096;xpt2046_show=final_result*10;//扩大十倍,便于显示result[0]=xianshi_shuzhu[xpt2046_show/10]|0x80;result[1]=xianshi_shuzhu[xpt2046_show%10];smg_play(result);}
}

二,PWM波实现呼吸灯

  PWM:利用方波信号,可以等效正弦信号,相当于利用数字信号来等效模拟信号,数字信号好控制。利用这个方波信号控制的好处是利用占空比来输出不同的电压,占空比:一个周期内高电平占总周期的比例。

   因此实现呼吸灯控制,就是来控制这个PWM波,关键就是控制占空比,从而等效输出不同的电压,电压不同,灯的明暗程度不同。

   程序:主要利用定时器中断,设置这个定时器中断的进入时间,然后在中断中设置计次,这个计次即(周期=进入次数×每次进入的周期),然后在中断内设置在占空比内,PWM输出高电平,占空比外输出低电平。其次是主程序,要实现暗→亮的操作,即控制这个占空比从0到100。难点在于,怎么控制这个每次进入中断的周期、PWM的周期以及占空比这几个变量的关系,以及主函数怎么样实现占空比的变化(局部变量和全局变量)。

#include "pwm.h"
u8 g_th,g_tl,g_zhouqi,g_zan;
void PWM_init(u8 th,u8 tl,u8 zhouqi,u8 zan)//设置定时器中断初始化,以及周期 占空比 每次进入周期
{g_th=th;g_tl=tl;g_zhouqi=zhouqi;g_zan=zan;TMOD=TMOD|0x01;//定时器中断初始化EA=1;ET0=1;TH0=g_th;//每次进入的中断的周期TL0=g_tl;TR0=1;
}
void zan_adjust(u8 a_zan)
{g_zan=a_zan;
}void 	PWM_interrupt(void) interrupt 1
{static int i=0;TH0=g_th;TL0=g_tl;i++;if(i==g_zhouqi) i=0;//设置其周期为进入100次 T=每次进入周期0.01×100=1msif(i<=g_zan) PWM=1;//占空比内高电平else PWM=0;//占空比外低电平
}
#include "pwm.h"
void main(void)
{int j=0,main_zan;PWM_init(0xff,0xf6,100,0);//每次进入周期0.01ms  PWM周期 100×0.01=1ms 初始为了暗 设占空比0while(1){if(j==0){main_zan++;if(main_zan==100) j=1;}if(j==1){main_zan--;if(main_zan==0) j=0;}zan_adjust(main_zan);delay_1ms(1);//延时一下,让其更顺畅}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com