📄 text1.c
字号:
#include <reg51st.H>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DP =P1^0;//
sbit COM1 =P1^1;
sbit COM2 =P1^2;
sbit COM3 =P1^3;
sbit ACC_Detect =P1^4;//ACC Detect
sbit INPUT =P1^5;//voltage detect
sbit SW =P1^6;
sbit LED_COM =P1^7;
/********************************************/
//引脚P3的定义
sbit RedLED1 =P3^0;
sbit RedLED2 =P3^1;//
sbit GreenLED1 =P3^2;
sbit GreenLED2 =P3^3;//
sbit BlueLED1 =P3^4;//
sbit BlueLED2 =P3^5;//
uchar x,y,z,t,led,LedFlag,Delay;
uint count;
uchar code dig[]={0x3f,0x06,0x9B,0x8F,0xA6,0xAD,0xBD,0x47,0xBF,0xAF};
void mDelay(uchar c)//延时调用
{
uchar i;
for(i=0;i<c;i++);
}
void NmDelay(uchar c)
{
while(c--)
{
mDelay(255);
}
}
void Timer_Init()
{
TMOD=0x01;
TCON=0x00;
ET0=1;
// ET1=1;
EA=1;
// TR1=1;
}
void series_init()
{
SCON=0x50;//0xD8; //0xD0/M=3,REN=1; D0
PCON=0x00;
TI=1;
}
void Send_Char(uchar c)
{
TI=0;
SBUF=c;
while(TI==0);
TI=0;
}
/*void Time1(void) interrupt 3
{
count++;
if(count>62)TR1=0;
else
TR1=1;
}*/
void Num_Disp(uchar a,uchar b,uchar c)
{
x=a;
y=b;
z=c;
TR0=1;//启动定时器
}
void Display(uint a)
{
uchar i;
i=((a-102)*61/70);
x=a/100;
y=i/10;
z=(i)%10;
Num_Disp(x,y,z);
}
void Time0(void) interrupt 1
{
TR0=0;
count++;
LED_COM=0;
P3=dig[x];
DP=0;
COM1=1;
NmDelay(8);
COM1=0;
P3=dig[y];
DP=1;
COM2=1;
NmDelay(8);
COM2=0;
P3=dig[z];
DP=0;
COM3=1;
NmDelay(8);
COM3=0;
P3=led;
LED_COM=1;
TL0=0xFF;
TH0=0xE0;
TR0=1;
}
void WatchDog_Init()
{
WDT_CONTR=0x37;
}
void WatchDog_Clear()
{
WDT_CONTR=0x37;
}
void Sys_Init()
{
P1M0=0x30;//设置p1.4、p1.5为输入高阻
P1M1=0x00;
P1&=0x00;
Timer_Init();
ADC_CONTR=0xE5;
mDelay(100);
ADC_CONTR|=0x08;
LedFlag=0;
}
uchar Ad_Detect()
{
uchar i=0;
ADC_CONTR&=0xEF;
ADC_CONTR|=0x08;
while(!(ADC_CONTR&0x10))
{
i++;
if(i>5)return 0;
mDelay(10);
}
return ADC_DATA;
}
void Led_Change(uchar n)
{
uchar a,b;
switch(n)
{
case 1:
led>>=1;
if(led==0)led=0x20;
break;
case 2:
led<<=1;
if(led>0x20)led=0x01;
break;
case 3:
a=led<<(8-n);
b=led>>1;
led=a|b;
break;
case 4:
a=led<<(8-n);
b=led>>2;
led=a|b;
break;
case 5:
a=(led&0x07)>>1;
b=(led&0x38)<<1;
led=a|b;
if(led>0x40||led<1)
led=0x0c;
break;
case 6:
if(led>0x40||led<1||led==0x0C)
{
led=0x21;
break;
}
else
{
a=(led&0x07)<<1;
b=(led&0x38)>>1;
led=a|b;
break;
}
case 7:
led=~led;
break;
default: break;
}
}
void main(void)
{
uchar Data,temp;
Sys_Init();
WatchDog_Init();
Send_Char('O');
Send_Char('K');
Send_Char('!');
while(1)
{
while(1)
{
WatchDog_Clear();
mDelay(10);
if(Ad_Detect()!=0) Data=Ad_Detect();
if(Data>0x65&&Data<0xA5&&ACC_Detect==1)
{
if(count>3876)
{
if((Data<(temp+3))&&(Data>(temp-3))) temp=Data;
else break;//continue;
}
else break;
}
NmDelay(255);
Send_Char(0x88);
}
count=0;
LedFlag=0;
SW=1;
while(1)
{
WatchDog_Clear();
if(Ad_Detect()!=0) temp=Ad_Detect();
if(temp<0x65||temp>0xA5||ACC_Detect==0||count>3876)
{
TR0=0;
SW=0;
P3=0;
LED_COM=0;
break;
}
else if((temp>(Data+3))||(temp<(Data-3)))
{
TR0=0;
count=0;
TR0=1;
}
Data=temp;
if(temp>0x64&&temp<0x6E)
{
if(LedFlag!=1)
{
LedFlag=1;
led=0x20;
Delay=60;
}
else
Led_Change(1);
}
else if(temp>0x6D&&temp<0x77)
{
if(LedFlag!=2)
{
LedFlag=2;
led=0x01;
Delay=60;
}
else
Led_Change(2);
}
else if(temp>0x76&&temp<0x80)
{
if(LedFlag!=3)
{
LedFlag=3;
led=0x09;
Delay=130;
}
else
Led_Change(3);
}
else if(temp>0x7F&&temp<0x89)
{
if(LedFlag!=4)
{
LedFlag=4;
led=0x09;
Delay=130;
}
else
Led_Change(4);
}
else if(temp>0x88&&temp<0x92)
{
if(LedFlag!=5)
{
LedFlag=5;
led=0x0C;
Delay=100;
}
else
Led_Change(5);
}
else if(temp>0x91&&temp<0x9B)
{
if(LedFlag!=6)
{
LedFlag=6;
led=0x21;
Delay=150;
}
else
Led_Change(6);
}
else
{
if(LedFlag!=7)
{
LedFlag=7;
led=0x55;
Delay=190;
}
else
Led_Change(7);
}
P3=led;
LED_COM=1;
NmDelay(Delay);
Display(temp);
//Send_Char(0x88);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -