标题:
C51单片机+ADC0832声光控制电路原理图+源码
[打印本页]
作者:
kevena
时间:
2018-12-3 18:06
标题:
C51单片机+ADC0832声光控制电路原理图+源码
使用Proteus 8 Professional/Keil uVision5。
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//ADC0832引脚定义
sbit CS = P1^4;
sbit CLK = P1^5;
sbit DIO = P1^6;
sbit External_Opto = P1^3;//外部光控制
sbit Lamp = P2^0;//灯光控制
sbit K1 = P3^7;//外部声音模拟控制
//延时
void DelayMS(uint x)
{
uchar t;
while(x--) for(t = 0;t<120;t++);
}
//获取A/D转换结果(0通道)
uchar Get_AD_Result()
{
uchar i,dat1 = 0,dat2 = 0;
//起始控制位
CS = 0;
CLK = 0;
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
//第一个下降沿之前,设DI=1/0
//选择单端/差分(SGL/DIF)模式中的单端输入模式
CLK = 0; DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
//第二个下降沿之前,设DI=1/0,选择CH0/CH1
CLK = 0; DIO = 0; _nop_(); _nop_();
CLK = 1; DIO = 1; _nop_(); _nop_();
//第三个下降沿之前,设DI=1
CLK = 0; DIO = 1; _nop_(); _nop_();
//第4~11,共八个下降沿读数据(MSB->LSB)
for(i = 0;i < 8; i++)
{
CLK = 1; _nop_(); _nop_();
CLK =0; _nop_(); _nop_();
dat1 = dat1 << 1 |DIO;
}
//第11~18,共八个下降沿读数据(LSB->MSB)
for(i = 0;i < 8; i++)
{
dat2 = dat2 | ( (uchar) (DIO) << i );
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
}
CS = 1;
//如果MSB->LSB和LSB->MSB读取的结果相同,则返回读取的结果,否则返回0
return (dat1 == dat2) ? dat1 : 0;
}
//主程序
void main()
{
Lamp = 0;
while(1)
{
//出现声音但没有光照时照明设备点亮后延时关闭
if ( K1 == 0 && External_Opto!= 0)
{
while (K1 == 0);
Lamp = 1;
DelayMS(100);
//延时时间由模数转换结果决定
DelayMS(30 * Get_AD_Result());
DelayMS(100);
Lamp = 0;
}
}
}
复制代码
所有资料51hei提供下载:
照明控制.rar
(14.29 KB, 下载次数: 55)
2018-12-3 18:06 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-12-3 18:10
补全仿真工程详细说明一下电路连接即可获得100+黑币
作者:
尼克尼克
时间:
2020-7-4 10:15
不给电路图算是个什么行为????????
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1