#include"reg51.h"
#define uint unsigned int
void Delayms(uint);
void PWM_Init();
void Key();
void Clock();
void Init_Timer0();
//void ADC0809();
sbit LED=P3^4;
sbit HW=P3^5;
sbit Ind=P3^6;
sbit Beep=P3^7;
sbit sub=P2^0;
sbit add=P2^1;
sbit set=P2^2;
sbit change=P2^3;
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;
//------ADC0809--------------
/*sbit clk=P3^0;
sbit st=P3^1;
sbit eoc=P3^2;
sbit oe=P3^3;*/
#define Data P0
unsigned char timer0_cnt,r1;
unsigned char i;
unsigned char s1;s2;s3;s4;
unsigned char se;
unsigned char c_set;
uint pwm=100,aa=600;
uint pwm_cnt=0;
bit flag0;
bit flag_set;
bit flag_beep;
unsigned char code SHUZI[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code SHUDIAN[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
0xff,0xef};
void Delay(uint t)
{
while(--t);
}
void Delayms(uint t) //3ms
{
int j;
for(;t>0;t--)
for(j=0;j<=300;j++);
}
/*void ADC0809()
{
st=0;
st=1;
st=0;
eoc=1;
while(eoc==0)
{
eoc=1;
Beep=0;
}
oe=1;
Data=0xFF;
Delayms(1);
oe=0;
}*/
void main()
{
w1=1;
w2=1;
w3=1;
w4=1;
s1=0;
s2=0;
s3=0;
s4=0;
i=0;
se=0;
flag0=0;
flag_set=0;
flag_beep=0;
Beep=1; //1不响
LED=0; //0点亮
timer0_cnt=0;
r1=0;
Init_Timer0();
while(1)
{
if(HW==1) //HW接近为0,离开为1
Beep=1;
else //接近
Beep=0;
Key();
if(flag_set==0)
{
Clock();
}
if((s1==0)&&(s2==0)&&(s3==0)&&(s4==0)&&(flag_beep==1))
{
Beep=0;
Delayms(5000);
flag_beep=0;
Beep=1;
}
if(Ind==1)
{
PWM_Init();
}
else
LED=1;
// if(r1=80)
// ADC0809();
// pwm=Data/255;
}
}
void PWM_Init()
{
if(add==0)pwm++;//add是按键开关
if(sub==0)pwm--;//sub也是
if(pwm==600)pwm=599;
if(pwm==50)pwm=51;
LED=0; //灯亮
Delay(pwm);
LED=1; //灭
Delay(aa-pwm);
}
void Key()
{
if(set==0)
{
Delayms(5); // 5ms
if(set==0)
{
Delayms(333); //延时1s
flag_set=~flag_set;
w1=0;w2=1;w3=1;w4=1;
c_set=0;
flag0=0;
}
}
if(flag_set==1)
{
if(add==0) //加
{
Delayms(5);
if(add==0)
{
Delayms(333); //延时1s
if(w1==0)
{
if(s1<9)
s1++;
else
s1=0;
}
else if(w2==0)
{
if(s2<5)
s2++;
else
s2=0;
}
else if(w3==0)
{
if(s3<9)
s3++;
else
s3=0;
}
else if(w4==0)
{
if(s4<5)
s4++;
else
s4=0;
}
}
}
if(sub==0) //减
{
Delayms(5);
if(sub==0)
{
Delayms(333); //延时1s
if(w1==0)
{
if(s1>0)
s1--;
else
s1=9;
}
if(w2==0)
{
if(s2>0)
s2--;
else
s2=5;
}
if(w3==0)
{
if(s3>0)
s3--;
else
s3=9;
}
if(w4==0)
{
if(s4>0)
s4--;
else
s4=5;
}
}
}
if(change==0) //换
{
Delayms(5);
if(change==0)
{
Delayms(333); //延时1s
se++;
if(se>3)
se=0;
switch(se)
{
case 0:w1=0;w2=1;w3=1;w4=1;c_set=0; break;
case 1:w1=1;w2=0;w3=1;w4=1;c_set=1; break;
case 2:w1=1;w2=1;w3=0;w4=1;c_set=2; break;
case 3:w1=1;w2=1;w3=1;w4=0;c_set=3; break;
default:break;
}
}
}
switch(c_set)
{
case 0: P0=~SHUZI[s1];
break;
case 1: P0=~SHUZI[s2];
break;
case 2: P0=~SHUDIAN[s3];
break;
case 3: P0=~SHUZI[s4];
break;
default:break;
}
}
}
void Clock()
{
if(flag0==1)
{
flag0=0;
if(s1>0)
s1--;
else if((s2>0)||(s3>0)||(s4>0))
{
s1=9;
if(s2>0)
s2--;
else if((s3>0)||(s4>0))
{
s2=5;
if(s3>0)
s3--;
else if(s4>0)
{
s3=9;
s4--;
}
}
}
if((s1==1)&&(s2==0)&&(s3==0)&&(s4==0))
{
flag_beep=1;
}
}
i++;
if(i>3)
i=0;
switch(i)
{
case 0: w1=0;w2=1;w3=1;w4=1;
P0=~SHUZI[s1];
break;
case 1: w1=1;w2=0;w3=1;w4=1;
P0=~SHUZI[s2];
break;
case 2: w1=1;w2=1;w3=0;w4=1;
P0=~SHUDIAN[s3];
break;
case 3: w1=1;w2=1;w3=1;w4=0;
P0=~SHUZI[s4];
break;
default:break;
}
P0=0xFF;
}
void Init_Timer0() //5ms,T0,方式0
{
TH0=0X4C;
TL0=0X00;
TMOD=0x01;
flag0=0;
TF0=0;
ET0=1;
EA=1;
TR0=1;
}
void Timer0(void) interrupt 1
{
TH0=0X4C;
TL0=0X00;
if(timer0_cnt<20) //1s
{
timer0_cnt++;
}
else
{
timer0_cnt=0;
flag0=1;
}
r1++;
if(r1>100)
r1=0;
}
智能台灯(内含原理图及代码)
需积分: 5 11 浏览量
2017-11-17
10:04:29
上传
评论 40
收藏 23KB RAR 举报
z565701802
- 粉丝: 5
- 资源: 2
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈