基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真

基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真

ID:39864210

大小:52.50 KB

页数:4页

时间:2019-07-13

基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真_第1页
基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真_第2页
基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真_第3页
基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真_第4页
资源描述:

《基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于51单片机的ADC0832电压采样,12864液晶显示的Proteus仿真(1:源程序2:Proteus仿真)1源程序:#include#include#defineuintunsignedint#defineucharunsignedchar#definedelay4us(){_nop_();_nop_();_nop_();_nop_();}//ADC0832引脚定义sbitCS=P1^0;sbitCLK=P1^1;sbitDIO=P1^2;//LCD1602端口定义sbitRS=P2^0;sbitRW=P2^1;sbitE=P2^2;//一位整数

2、,两位小数的数字电压显示缓冲ucharDisplay_Buffer[]="0.00V";//LCD第一行显示的信息ucharcodeLine1[]="CurrentVoltage:";//延时子程序voidDelayMS(uintms){uchart;while(ms--)for(t=0;t<120;t++);}//LCD忙状态检测bitLCD_Busy_Check(){bitresult;RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0;returnresult;}//写LCD命令voidLCD_Write_Command(ucharcmd

3、){while(LCD_Busy_Check());//判断LCD是否忙碌RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;delay4us();E=1;delay4us();E=0;}//设置LCD显示位置voidSet_Disp_Pos(ucharpos){LCD_Write_Command(pos

4、0x80);}//写LCD数据voidLCD_Write_Data(uchardat){while(LCD_Busy_Check());//判断LCD是否忙碌RS=1;RW=0;E=0;P0=dat;delay4us();E=1;delay4us();E=0;}//LC

5、D初始化voidLCD_Initialise(){LCD_Write_Command(0x38);DelayMS(1);LCD_Write_Command(0x0C);DelayMS(1);LCD_Write_Command(0x06);DelayMS(1);LCD_Write_Command(0x01);DelayMS(1);}//获取AD转换结果ucharGet_AD_Result(){uchari,dat1=0,dat2=0;//起始控制位CS=0;CLK=0;DIO=1;_nop_();_nop_();CLK=1;_nop_();_nop_();//第一个下降沿之前,设Di=1/0//

6、选择单端/差分(SGL/DIF)模式中的单端输入模式CLK=0;DIO=1;_nop_();_nop_();CLK=1;_nop_();_nop_();//第二个下降沿之前,设DI=0/1,选择CH0/CH1CLK=0;DIO=0;_nop_();_nop_();CLK=1;DIO=1;_nop_();_nop_();//第三个下降沿之前,设DI=1CLK=0;DIO=1;_nop_();_nop_();//第4-11,共8个下降沿读数据(MSB=>LSB)for(i=0;i<8;i++){CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();dat1=dat

7、1<<1

8、DIO;}//11-18,共8个下降沿读数据(LSB=>MSB)for(i=0;i<8;i++){dat2=dat2

9、((uchar)(DIO)<LSB和LSB->MSB读取的结果相同,则返回读取的结果,否则返回0return(dat1==dat2)?dat1:0;}/*主程序*/voidmain(){uchari;uintd;//注意d的类型LCD_Initialise();DelayMS(10);while(1){//获取AD转换值,最大值255对应于最高

10、电压5.00V//本例中设计为显示三个位数,故使用500d=Get_AD_Result()*500.0/255;//将AD转换后的数据分成3个数位Display_Buffer[0]=d/100+'0';Display_Buffer[2]=d/10%10+'0';Display_Buffer[3]=d%10+'0';Set_Disp_Pos(0x01);//设置显示位置i=0;while(Line1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。