完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
RT,用的是PCF8591芯片,接图如下,调节U1电阻小灯看到小灯确实有明显的明暗变化,可就是数码管显示不出来数值
请问哪里出了错,这样写程序可靠吗,顺便再问一下,为什么写、读字节都要有SCL=0,SDA=1的操作? 编译时总出来C141错误,随便改了个名字没有了,这个错误到底是什么意思? #include #define uchar unsigned char #define uint unsigned int ***it SDA=P2^0; ***it SCL=P2^1; ***it du=P2^6; ***it we=P2^7; uchar code table[]={ //0 1 2 3 4 5 6 7 8 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, //9 A B C D E F - . 关显示 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00 }; uint Value; void delay_5us() {;;} void delay(uint z) { uint a; for(z=z;z>0;z--) for(a=110;a>0;a--); } void init() { SDA=1; delay_5us(); SCL=1; delay_5us(); } void start() { SDA=1; delay_5us(); SCL=1; delay_5us(); SDA=0; delay_5us(); } void stop() { SDA=0; delay_5us(); SCL=1; delay_5us(); SDA=1; delay_5us(); } void respons() { uchar i; SCL=1; delay_5us(); while((SDA==1)&&(i<250))i++; delay_5us(); SCL=0; delay_5us(); } void write_byte(uchar dat) { uchar i,temp; temp=dat; for(i=0;i<8;i++) { temp=temp<<1; SCL=0; delay_5us(); SDA=CY; delay_5us(); SCL=1; delay_5us(); } SCL=0; delay_5us(); SDA=1; delay_5us(); } uchar read_byte() { uchar i,k; SCL=0; delay_5us(); SDA=1; delay_5us(); for(i=0;i<8;i++) { SCL=1; delay_5us(); k=(k<<1)|SDA; SCL=0; delay_5us(); } return k; } void DAC_out(uchar dat) { start(); write_byte(0x90); respons(); write_byte(0x40); respons(); write_byte(dat); respons(); stop(); } uchar ADC_read() { uchar Data; start(); write_byte(0x90); respons(); write_byte(0x01); respons(); start(); write_byte(0x90+1); respons(); Data=read_byte(); return Data; } void display(uint V) { we=0; P0=0xfe; we=1; we=0; P0=table[V/100]; du=1; du=0; delay(5); we=0; P0=0xfd; we=1; we=0; P0=table[V%100/10]; du=1; du=0; delay(5); we=0; P0=0xfb; we=1; we=0; P0=table[V%10]; du=1; du=0; delay(5); } void main() { init(); while(1) { Value=ADC_read(); DAC_out(Value); display(Value); } } |
|
相关推荐
11个回答
|
|
|
云汉达人
本帖最后由 LiuYang 于 2016-10-30 18:13 编辑 SDA、SCL是I2C的读写,控制8591的AD读取和DA的输出,所以只要是操作8591就要控制这两个脚。 随便改了个名字就能消除编译错误?这个不太可能吧,原来报的什么错? |
|
|
|
|
LiuYang 发表于 2016-10-30 18:02 比如这个:难道是不同函数定义的名字也不能一样? |
|
|
|
|
|
你还是把PCF8591手册好好看看
|
|
|
|
|
|
|
|
|
|
|
|
我用protues仿真,可以确定的是,程序是可以正确读到数据的。读不到是因为………………你读的是通道1的电压,而你调的是通道0的电压,你可以调节V2电阻看看
|
|
|
|
|
|
云汉达人
艾笠调查团 发表于 2016-10-30 19:42 有可能是全角字符造成的,这个字体真看不出是全角还是半角的。data改成dat就编译通过了? |
|
|
|
|
一书生0414 发表于 2016-10-30 22:08 不过我调的确实是V2... 0.0 |
|
|
|
|
|
刚刚突然想到也许数模转换需要的时间太长,在display函数上面加个延迟5毫秒居然就显示出来了......谢谢大家了:P看来还是多学习一下基础知识
|
|
|
|
|
LiuYang 发表于 2016-10-31 14:18 是呢...我还是换个字体吧 |
|
|
|
|
MOP 发表于 2016-10-30 19:49 這樣改了...但還是沒用,不過我發現在display上加個5毫秒延遲就可以現實了,回復這麽多謝謝啦 |
|
|
|
|
|
本帖最后由 MOP 于 2016-10-31 21:30 编辑
艾笠调查团 发表于 2016-10-31 19:58不會:),不過打Code時候字體要選擇一下才不會全型半型混雜,您的delay確實跟一般寫法不同,因為DAC_out(Value)有反應到LED的話,是Value取值正確而不用再延時,不過有解決問題就好,祝學習愉快:) |
|
|
|
|
只有小组成员才能发言,加入小组>>
1058 浏览 1 评论
1878 浏览 0 评论
1858 浏览 1 评论
3281 浏览 5 评论
3610 浏览 9 评论
1058浏览 1评论
1882浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1386浏览 1评论
1878浏览 0评论
1201浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-10 12:44 , Processed in 0.941711 second(s), Total 94, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
12604