完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
是这样的,,我想通过改变PCF8591外围电位器而改变数码管和上位机(串口通讯)的值 用的是I2C总线通讯其中关于赋值是这样写的
Send_Byte(PCF8591,0x40) ad_val=Rcv_Byte(PCF8591); 结果是不管怎么拧电位器 数码管和上位机的值始终都不变 试了好多办法就是就是解决不了 希望大家帮忙看看,,,是不是我PCF8591操作不当呢?。。。下面是全部程序 #include #include #include"I2C.h" #define PCF8591 0x90 //PCF8591地址 unsigned char ad_val,a,t0_num,flag_num,flag_on,flag_uart,flag_time; float ad_vo; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管段选0~9 //unsigned char code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选 void init() //定时器初始化 { TMOD=0x21; //设置定时器1为工作方式2,定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xf3; //波特率为4800 TL1=0xf3; TR1=1; PCON=0x80; //波特率加倍,晶振为12MHZ时为了减小误差 ET0=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void Display(unsigned int value) //数码管显示函数 { unsigned char ge,shi,bai; bai=value/100; shi=value%100/10; ge=value%100%10; P0=table[bai]; P2=0x7f; P0=0x00; Nop(); P0=table[shi]; P2=0xbf; P0=0x00; Nop(); P0=table[ge]; P2=0xdf; P0=0x00; Nop(); } unsigned char Rcv_Byte(unsigned char value) //接受AD数据 { unsigned char Data; I2c_Star(); //开启总线 Write_Byte(value+1); //发送器件地址 Data=Read_Byte; //读取数据 Ack_I2c(1); //发送非就答位 I2c_Stop(); //结束总线 return Data; } void Send_Byte(unsigned char value,unsigned char i) //发送数据 { I2c_Star(); Write_Byte(value); Write_Byte(i); I2c_Stop(); } void main() { init(); while(1) { if(flag_uart==1) //若上位机发来数据 { flag_uart=0; ES=0; TI=1; switch(flag_on) { case 0:puts("Turn on AD!n"); TR0=1; break; case 1:printf("Turn off AD!n"); TR0=0; break; case 2:puts("Error!n"); break; } while(!TI); TI=0; ES=1; } if(flag_time==1) { flag_time=0; Send_Byte(PCF8591,0x40); ad_val=Rcv_Byte(PCF8591); ad_vo=(float)ad_val*5.0/256.0; ES=0; TI=1; printf("The voltage is%fVn",ad_vo); while(!TI); TI=0; ES=1; } Display(ad_val); } } void T0_time() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0_num++; if(t0_num==20) { t0_num=0; flag_time=1; } } void ser() interrupt 4 { RI=0; a=SBUF; flag_uart=1; if(a==1) flag_on=0; if(a==2) flag_on=1; else flag_on=0; } |
|
相关推荐
3个回答
|
|
|
|
|
|
我也不懂 帮顶上去~~~
|
|
|
|
等待大神的出现
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
1168 浏览 3 评论
728 浏览 0 评论
【xG24 Matter开发套件试用体验】10-Bluetooth示例1
836 浏览 0 评论
919 浏览 0 评论
【xG24 Matter开发套件试用体验】power specification电源规格参数配置
747 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10860 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-26 05:17 , Processed in 0.520148 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号