#include <reg52.h> /?????
#define uchar unsigned char /??? ??? ????0~255
#define uint unsigned int /?? ??? ????0~65535
sbit SCL=P2^2; //SCL???P2???2??,??ADC0832SCL?
sbit DO=P2^3; //DO???P2???3??,??ADC0832DO?
sbit CS=P2^0; //CS???P2???0??,??ADC0832CS?
sbit ZD=P1^3;
sbit SD =P1^4;
sbit D0= P0^0;
sbit D1 = P0^1;
sbit D2=P0^2;
sbit D3=P0^3;
sbit D4=P0^4;
sbit D5=P0^5;
sbit D6 = P0^6;
sbit D7= P0^7;
sbit td_led = P3^5;
uchar f_pwm_l ; /?
bit flag_moshi;
uchar dangwei; //
uchar guangxian; /????
/***********************1ms????*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/***********???????********************************************************/
/?ADC0832?????????,??????,???????????,??????0832????????
// 1 1 0 ??
// 1 1 1 ??
unsigned char ad0832read(bit SGL,bit ODD)
{
unsigned char i=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0; //
SCL=1; /???
SCL=0;
DO=SGL;
SCL=1; /???
SCL=0;
DO=ODD;
SCL=1; /???
SCL=0; /???
DO=1;
for(i=0;i<8;i++)
{
SCL=1;
SCL=0; /??????????
value>>=1;
if(DO)
value++;
}
for(i=0;i<8;i++)
{ /???
value1>>=1;
if(DO)
value1+=0x80;
SCL=1;
SCL=0;
}
CS=1;
SCL=1;
if(value==value1) /????,???????,????0
return value;
return 0;
}
uchar key_can;
/********************??????*****************/
void key()
{
static uchar key_new;
key_can = 20;
if((P2 & 0xf0) != 0xf0)
{
delay_1ms(1);
if(((P2 & 0xf0) != 0xf0) && (key_new == 1))
{
key_new = 0;
switch(P2 & 0xf0)
{
case 0xe0: key_can = 1; break; /1?
case 0xd0: key_can = 2; break; /2?
case 0xb0: key_can = 3; break; /3?
}
SD = 0;
delay_1ms(80);
ZD = 0;
}
}
else
key_new = 1;
}
/***************??***************/
void led_dangwei(uchar dat)
{
switch(dat)
{
case 7: TR1 = 0; //
td_led = 1;
P0=0x00;/?
break;
case 6: TR1 = 1; //
f_pwm_l = 20;
P0=0x01;
break;
case 5: TR1 = 1; //
f_pwm_l = 40;
P0=0x03 ;
break;
case 4: TR1 = 1; //
f_pwm_l = 60;
P0=0x07;
break;
case 3: TR1 = 1; //
f_pwm_l = 80;
P0=0x0f;
break;
case 2: TR1 = 1; //
f_pwm_l = 90;
P0=0x1f;
break;
case 1: TR1 = 1; //
f_pwm_l = 95;
P0=0x3f;
break;
case 0: TR1 = 0; //
td_led = 0;
P0=0x7f;
break;
}
}
/****************??????***************/
void key_with()
{
if(key_can == 1) /
{
flag_moshi = ~flag_moshi;
} //
if(flag_moshi == 1) /?
{
if(key_can == 2) //
{
dangwei ++;
if(dangwei >= 7)
dangwei = 7;
}
if(key_can == 3) //
{
if(dangwei != 0)
dangwei --;
}
led_dangwei(dangwei) ; //
}
}
/*************???0?????***************/
void time_init()
{
EA = 1; /?
TMOD = 0X10; /1????1
ET1 = 1; /?0??
TR1 = 0; /??0??
}
/********************************************************************
* ?? : Main()
* ?? : ???
* ?? : ?
* ?? : ?
***********************************************************************/
void Main()
{
time_init(); /???
SD = 0;
f_pwm_l = 99;
while(1)
{
key();
if(key_can < 10)
key_with();
if(flag_moshi == 0) /?
{ZD = 0;
SD=1;}
else
{SD = 0;
ZD=1; } /?
if(flag_moshi == 0) /?
{if(guangxian<10)
P0=0x7f;
if(guangxian<25&&guangxian>=10)
P0=0x3f;
if(guangxian<37.5&&guangxian>=25)
P0=0x1f;
if(guangxian<50&&guangxian>=37.5)
P0=0x0f;
if(guangxian<62.5&&guangxian>=50)
P0=0x07;
if(guangxian<75&&guangxian>=62.5)
P0=0x03;
if(guangxian<87.5&&guangxian>=75)
P0=0x01;
if(guangxian<=99&&guangxian>=87.5)
P0=0x00;
if(guangxian <= 10) //
{
TR1 = 0; //
td_led = 0;
P0=0x7f;
}else if(guangxian >= 90) //
{
TR1 = 0; //
td_led = 1;
P0=0x00;
}else
{
TR1 = 1;
f_pwm_l = guangxian;
}
}
guangxian = ad0832read(1,0); /?
guangxian = guangxian *99/255;
delay_1ms(1);
}
}
/*******************???1???????PWM ??***********************/
void Timer1() interrupt 3 /??1
{
static uchar value_l;
TH1=0xfe; //
TL1=0x0c; //
if(td_led==0)
{
value_l+=1;
if(value_l > f_pwm_l) /
{
td_led=1;
}
}
else
{
value_l+=1;
if(value_l > 100 - f_pwm_l) /
{
td_led=0;
}
}
}
|