完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前在做一个基于at89c51单片机的声光控制开关,,发现源代码跟原理图根本不匹配,,希望师兄师姐帮忙改一下源代码,附图一张加不匹配的源代码!!!
#include #include #define uint unsigned int #define uchar unsigned char uchar temp,aa,bai,shi,ge,tt; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // //数码管段定义; uchar code table1[]={0xfb,0xfd,0xfe}; //数码管位定义; ***it open=P3^7; ***it key1=P1^0; ***it key2=P1^1; ***it key3=P1^2; ***it light=P3^2; //ADC0832的引脚; ***it adCS =P3^1; //ADC0832 片选 ; ***it adDI =P3^3; //ADC0832 通道选择和初始化输入 ; ***it adDO =P3^3; //ADC0832 的数据输出; ***it adCLK =P3^0; //ADC0832 时钟信号; uchar getdat; //获取ADC转换回来的值; void display(uchar shi,uchar ge); void delay(uint z); void keyscan(); void init(); uchar adc0832(unsigned char channel); //主程序 ; void main() { init();//初始化子程序 ; keyscan(); while(1) { light=1; //光线初始化为0; if(light==0) { getdat=adc0832(1); display(temp/10,temp%10); //显示数字; if (getdat>120) //声音超过2.4V后灯亮; { shi=temp/10; //取出十位数字; ge=temp%10; //取出个位数字; display(shi,ge); //显示数字; TR0=1; //启动定时器0; if(aa==16) { open=0; //开启照明灯; aa=0; temp--; //倒计时; if(temp==-1) { temp=0; open=1; //关闭照明灯; } } } } } } //延时函数; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } //显示数码管内容; void display(uchar shi,uchar ge) { P2=0xfe; P0=table[shi]; delay(1); P2=0xfd; P0=table[ge]; delay(1); P2=0xfc; } void init() { TMOD=0x01; TH0=(65536-50000)/256; //给定时器T0的高8位赋初值; TL0=(65536-50000)%256; //给定时器T0的低8位赋初值; EA=1; //开cpu总中断; ET0=1; //开T0中断; TR0=0; //关闭定时器0; IE0=1; //外中断0初始化 ; IT0=1; //下降沿触发; EX0=1; light=1; //光线初始化为0; } //T0中断函数; void timer0() interrupt 1 { TH0=(65536-50000)/256; //赋初值; TL0=(65536-50000)%256; aa++; } //外中断0函数 ; void int0() interrupt 0 { light=0; } //键盘扫描函数 ; void keyscan() { if(key1==0) { delay(5); //消抖; if(key1==0) //按下key1灯亮时间为10s; { temp=10; //10s延时; } } if(key2==0) { delay(5); //消抖; if(key2==0) //按下key2灯亮时间为20s; { temp=20; } } if(key3==0) { delay(5); //消抖; if(key3==0) //按下key3灯亮时间为30s; { temp=30; } } } uchar adc0832(unsigned char ch) //AD转换,返回结果; { uchar i=0; uchar j; uint dat1=0; uchar dat2=0; if(ch==0)ch=2; if(ch==1)ch=3; adDI=1; _nop_(); _nop_(); adCS=0;//拉低CS端; _nop_(); _nop_(); adCLK=1;//拉高CLK端; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿1 ; _nop_(); _nop_(); adCLK=1;//拉高CLK端; adDI=ch&0x1; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿2 ; _nop_(); _nop_(); adCLK=1;//拉高CLK端; adDI=(ch>>1)&0x1; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿3 ; adDI=1;//控制命令结束 ; _nop_(); _nop_(); dat1=0; for(i=0;i<8;i++) { dat1|=adDO;//收数据; adCLK=1; _nop_(); _nop_(); adCLK=0;//形成一次时钟脉冲 ; _nop_(); _nop_(); dat1<<=1; if(i==7)dat1|=adDO; } for(i=0;i<8;i++) { j=0; j=j|adDO;//收数据; adCLK=1; _nop_(); _nop_(); adCLK=0;//形成一次时钟脉冲 ; _nop_(); _nop_(); j=j<<7; dat2=dat2|j; if(i<7)dat2>>=1; } adCS=1;//拉低CS端; adCLK=0;//拉低CLK端; adDO=1;//拉高数据端,回到初始状态 ; dat1<<=8; dat1|=dat2; return(dat1); }
|
|
相关推荐
12个回答
|
|
我试试行吗?
|
|
|
|
1 0 0 2 9 2 5 0 9 4
|
|
|
|
|
|
|
|
不仅仅是源代码跟原理图根本不匹配的问题。
电路图的问题也很大。 1. 三极管Q1不能够可靠导通。 2. 光控部分那个反相器不方便元件配套,可以取消掉,光控运放(比较器)改接一下,就不需要反相了。 3. 声控部分还用了ADC转换器,高大上?完全没有必要啊。要用,就让它干点有用的大事儿,这里也没有什么大事儿。 |
|
|
|
|
|
|
|
这个图是我根据之前的图画的,,一样(不过也有可能会出现问题,你多留心一下)。
|
|
|
|
自己先动手试试,后面不做这行也是个经验!
|
|
|
|
|
|
|
|
#include #include #define uint unsigned int #define uchar unsigned char uchar temp,aa,bai,shi,ge,tt; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // //数码管段定义; uchar code table1[]={0xfb,0xfd,0xfe}; //数码管位定义; ***it open=P3^7; ***it key1=P1^0; ***it key2=P1^1; ***it key3=P1^2; ***it light=P3^2; //ADC0832的引脚; ***it adCS =P3^1; //ADC0832 片选 ; ***it adDI =P3^3; //ADC0832 通道选择和初始化输入 ; ***it adDO =P3^3; //ADC0832 的数据输出; ***it adCLK =P3^0; //ADC0832 时钟信号; uchar getdat; //获取ADC转换回来的值; void display(uchar shi,uchar ge); void delay(uint z); void keyscan(); void init(); uchar adc0832(unsigned char channel); //主程序 ; void main() { init();//初始化子程序 ; keyscan(); while(1) { light=1; //光线初始化为0; if(light==0) { getdat=adc0832(1); display(temp/10,temp%10); //显示数字; if (getdat>120) //声音超过2.4V后灯亮; { shi=temp/10; //取出十位数字; ge=temp%10; //取出个位数字; display(shi,ge); //显示数字; TR0=1; //启动定时器0; if(aa==16) { open=0; //开启照明灯; aa=0; temp--; //倒计时; if(temp==-1) { temp=0; open=1; //关闭照明灯; } } } } } } //延时函数; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } //显示数码管内容; void display(uchar shi,uchar ge) { P2=0xfe; P0=table[shi]; delay(1); P2=0xfd; P0=table[ge]; delay(1); P2=0xfc; } void init() { TMOD=0x01; TH0=(65536-50000)/256; //给定时器T0的高8位赋初值; TL0=(65536-50000)%256; //给定时器T0的低8位赋初值; EA=1; //开cpu总中断; ET0=1; //开T0中断; TR0=0; //关闭定时器0; IE0=1; //外中断0初始化 ; IT0=1; //下降沿触发; EX0=1; light=1; //光线初始化为0; } //T0中断函数; void timer0() interrupt 1 { TH0=(65536-50000)/256; //赋初值; TL0=(65536-50000)%256; aa++; } //外中断0函数 ; void int0() interrupt 0 { light=0; } //键盘扫描函数 ; void keyscan() { if(key1==0) { delay(5); //消抖; if(key1==0) //按下key1灯亮时间为10s; { temp=10; //10s延时; } } if(key2==0) { delay(5); //消抖; if(key2==0) //按下key2灯亮时间为20s; { temp=20; } } if(key3==0) { delay(5); //消抖; if(key3==0) //按下key3灯亮时间为30s; { temp=30; } } } uchar adc0832(unsigned char ch) //AD转换,返回结果; { uchar i=0; uchar j; uint dat1=0; uchar dat2=0; if(ch==0)ch=2; if(ch==1)ch=3; adDI=1; _nop_(); _nop_(); adCS=0;//拉低CS端; _nop_(); _nop_(); adCLK=1;//拉高CLK端; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿1 ; _nop_(); _nop_(); adCLK=1;//拉高CLK端; adDI=ch&0x1; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿2 ; _nop_(); _nop_(); adCLK=1;//拉高CLK端; adDI=(ch>>1)&0x1; _nop_(); _nop_(); adCLK=0;//拉低CLK端,形成下降沿3 ; adDI=1;//控制命令结束 ; _nop_(); _nop_(); dat1=0; for(i=0;i<8;i++) { dat1|=adDO;//收数据; adCLK=1; _nop_(); _nop_(); adCLK=0;//形成一次时钟脉冲 ; _nop_(); _nop_(); dat1<<=1; if(i==7)dat1|=adDO; } for(i=0;i<8;i++) { j=0; j=j|adDO;//收数据; adCLK=1; _nop_(); _nop_(); adCLK=0;//形成一次时钟脉冲 ; _nop_(); _nop_(); j=j<<7; dat2=dat2|j; if(i<7)dat2>>=1; } adCS=1;//拉低CS端; adCLK=0;//拉低CLK端; adDO=1;//拉高数据端,回到初始状态 ; dat1<<=8; dat1|=dat2; return(dat1); } |
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4849 浏览 3 评论
6138 浏览 1 评论
6406 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
8154 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1236 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 19:52 , Processed in 0.851640 second(s), Total 67, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号