可以用于智能家居灯光系统的简单仿真
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:- #include "reg51.h"
- #include "ADC0832.h"
- #include"Ds18b20.h"
- #include "lcd1602.h"
- #include <PCF8591.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit led1=P3^2;//led
- sbit led2=P3^3;
- sbit led3=P3^4;
- uchar light=0;//光照
- uchar disp1[]="temp:00C";
- uchar disp2[]="light:000Lx";
- uchar time=0;//定时
- uchar pwm=0;//亮度
- //主函数
- void main()
- {
- init_1602();
- TMOD|=0X01;
- TH0=0X3C;
- TL0=0XB0;
- ET0=1;//打开定时器0中断允许
- EA=1;//打开总中断
- TR0=1;//打开定时器
- while(1)
- {
- }
- }
- //定时器中断
- void Timer0() interrupt 1
- {
- uint i=0;
- if(time<10)//0.5s
- time++;
- else
- {
- time=0;
- light=ADC(1);//测量亮度
- Ds18b20ReadTemp();//测量温度
- i=ds18b20_temp;
- disp1[5]=i/10+0x30;//显示
- disp1[6]=i%10+0x30;
- disp2[6]=light/100+0x30;
- disp2[7]=light%100/10+0x30;
- disp2[8]=light%10+0x30;
- write_string(1,0,disp1);
- write_string(2,0,disp2);
- //计算亮度
- if(light<100)
- PCF8591_write(light*2);
- else
- PCF8591_write(0xff);
- //颜色控制
- if(ds18b20_temp<10)
- {
- led1=1;led2=0;led3=0;
- }
- if((ds18b20_temp>9)&&(ds18b20_temp<20))
- {
- led1=1;led2=1;led3=0;
- }
- if((ds18b20_temp>19)&&(ds18b20_temp<30))
- {
- led1=0;led2=1;led3=0;
- }
- if((ds18b20_temp>29)&&(ds18b20_temp<40))
- {
- led1=0;led2=1;led3=1;
- }
- if((ds18b20_temp>39)&&(ds18b20_temp<50))
- {
- led1=0;led2=0;led3=1;
- }
- if((ds18b20_temp>49))
- {
- led1=1;led2=0;led3=1;
- }
- }
- TH0=0X3C;
- TL0=0XB0;
- }
复制代码
Proteus8.17仿真与程序视频讲解下载:
智能家居灯光系统程序.7z
(6.81 MB, 下载次数: 0)
|