智能台灯

来源:互联网 发布:mac英文全角 编辑:程序博客网 时间:2024/04/29 23:21

这个是比较简单了。。

也没什么好介绍的,直接上源码

 

ADC0832.H

/*****************************************************    功能:将模拟信号转换成数字信号***************************************************/sbit ADC0832_CS=P1^3;sbit ADC0832_CLK=P1^1;sbit ADC0832_DIO=P1^2; unsigned int  A_D(){   unsigned char i,dat;   ADC0832_CS=1;   //一个转换周期开始   ADC0832_CLK=0;  //为第一个脉冲作准备   ADC0832_CS=0;  //CS置0,片选有效   ADC0832_DIO=1;    //DIO置1,规定的起始信号     ADC0832_CLK=1;   //第一个脉冲   ADC0832_CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平   ADC0832_DIO=1;   //DIO置1, 通道选择信号     ADC0832_CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0    ADC0832_CLK=0;   //第二个脉冲下降沿    ADC0832_DIO=0;   //DI置0,选择通道0   ADC0832_CLK=1;    //第三个脉冲   ADC0832_CLK=0;    //第三个脉冲下降沿    ADC0832_DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1   ADC0832_CLK=1;    //第四个脉冲   for(i=0;i<8;i++)  //高位在前    {      ADC0832_CLK=1;         //第四个脉冲      ADC0832_CLK=0;       dat<<=1;       //将下面储存的低位数据向右移dat|=(unsigned char)ADC0832_DIO;  //将输出数据DIO通过或运算储存在dat最低位     }              ADC0832_CS=1;          //片选无效 return dat; //将读书的数据返回       }


main.c

 

#include<reg52.h>#include "ADC0832.H"#define uchar unsigned char#define uint unsigned intuchar PWM_ON=10;uchar timer_num=0;bit Auto_flag=0;bit Start_flag=0;sbit LED=P2^0;sbit KEY1=P3^4;sbit KEY2=P3^5;sbit KEY3=P3^6;sbit KEY4=P3^7;/************************************    延时子程序延时时间(xms*1)ms*************************************/void delayms(uint xms){uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}void keyscan(){if(!KEY1){delayms(8);if(!KEY1){Start_flag=~Start_flag;while(!KEY1);}}else{if(!KEY2){delayms(8);if(!KEY2){Auto_flag=~Auto_flag;while(!KEY2);}}}}void Control(){static uint AD_DAT=0;float ad_buf=0.0;static uchar i=0;if(Start_flag){TR0=1;if(Auto_flag==0){if(i<10) {i++;AD_DAT+=A_D();
}else
{i=0;ad_buf=(float)(AD_DAT/10);ad_buf=ad_buf/25.5;PWM_ON=(uchar)(ad_buf);AD_DAT=0;}}else{if(!KEY3){delayms(8);if(!KEY3){if(PWM_ON<10)PWM_ON++;while(!KEY3);}}else{if(!KEY4){delayms(8);if(!KEY4){if(PWM_ON>0)PWM_ON--;while(!KEY4);}}}}}else{TR0=0;LED=1;}}void main(){P2=0XFF;P1=0XFF;TMOD=0X01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;TR0=1;EA=1;while(1){Control();keyscan();}}void timer0() interrupt 1{TH0=(65536-1000)/256;TL0=(65536-1000)%256;timer_num++;if(timer_num>10){timer_num=0;LED=0;}else if(timer_num>PWM_ON){LED=1;}}


 

原创粉丝点击