📄 jbq.c
字号:
//晶振为4M
#include <reg52.h>
sbit d1=P3^0;
sbit d3=P3^2;
sbit d2=P3^1;
sbit led=P3^3;
sbit pwm=P1^7;
char num[10]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90};
unsigned char dis[3];
unsigned char high,delay1,onoff,key,onoff_on,keyup1,keyup2,pwm1;
unsigned char keyup,onoff_1,keyup3,delay,led_on,led_delay,fmq;
unsigned int t1min,time;
void int_t0 (void) interrupt 1
{
TR0=0;
TR1=0;
pwm=1; //计数100中断
led_on=1;
keyup2=1;
}
///////////////////////////////////////
//pwm频率为100Hz,占空比改变,
//晶振为4M
//
//////////////////////////////////////
void int_t1 (void) interrupt 3
{
high=~high;
if(high)
{
TL1=0xb2; // 定时1ms 20%PWM
TH1=0xfe; //
pwm=1;
}
else
{TL1=0xb4; // 定时3.3ms
TH1=0xfb; //
pwm=0;
}
if (pwm1==1)// 数码管计数到10时
{
if(high)
{
TL1=0xb2; // 定时1ms 30%PWM
TH1=0xfe;
pwm=1;
}
else
{TL1=0x01; // 定时2.3ms
TH1=0xfd; //
pwm=0;
}
}
}
void main(void)
{
unsigned char
i=0;
led_on=0;
led=0;
TMOD=0x16;//t0方式2,t0为计数,t1方式1,定时
TL0=0x9b; //自动重装 计数100
TH0=0x9b;
TL1=0xb2; // 定时1ms
TH1=0xfe; //
TR0=0;
TR1=0;
ET0=1;
ET1=1;
EA=1;
key=0;
keyup3=1;
keyup=1;
onoff=0;
onoff_1=0;
keyup2=0;
while(1)
{
/********************开机***************************/
if ((P3&0x20)==0)
{
while(++delay!=50);
delay=0;
if (((P3&0x20)==0)&&(onoff==0)&&(keyup==1)&&(key==0))
{
key=1;
keyup=0;
onoff=1;
onoff_1=0;
d1=0;
d2=0;
d3=0;
P1=num[0];
TR0=0;
TR1=0;
t1min=0;
pwm=1;
while((P3&0x20)==0);
}
}
/*****************关机*******************/
if ((P3&0x20)==0)
{
while(++delay!=50);
delay=0;
if (((P3&0x20)==0)&&(onoff==1)&&(keyup==0)&&(key==1))
{TR0=0;
TR1=0;
key=0;
pwm1=0;
led_on=0;
led=0;
led_delay=0;
keyup1=0;
d1=1;
d2=1;
d3=1;
onoff_on=0;
keyup=1;
onoff=0;
P1=0xff;
while((P3&0x20)==0);
}
}
/**************************开始计时并启动电机*****************************/
if((P3&0x80)==0)
{
while(++delay!=50);
delay=0;
if(((P3&0x80)==0)&&(key==1)&&(onoff_1==0))
{ while((P3&0x80)==0);
pwm=1;
pwm1=0;
TL0=0x9b; //自动重装 计数100
TH0=0x9b;
TL1=0xb2; // 定时1ms 50%PWM
TH1=0xfe;
TR0=1;
TR1=1;
led=0;
t1min=0;
led_on=0;
onoff_1=1;
keyup1=1;
keyup2=0;
keyup3=1;
}
}
/************************清零*************************/
if((P3&0x80)==0)
{
while(++delay!=50);
delay=0;
if(((P3&0x80)==0)&&(key==1)&&(onoff_1==1))
{ pwm1=0;
pwm=1;
TR0=0;
TR1=0;
TL0=0x9b; //自动重装 计数100
TH0=0x9b;
TL1=0xb2; // 定时1ms 50%PWM
TH1=0xfe;
led=0;
led_delay=0;
led_on=0;
t1min=0;
onoff_1=0;
keyup1=1;
keyup2=0;
keyup3=1;
while((P3&0x80)==0);
}
}
/***********LED显示数据*********/
if((keyup1==1)&&(keyup2==0))
{
dis[0]=(TL0-155)/100; //0
dis[1]=((TL0-155)%100)/10;//0-9
dis[2]=(TL0-155)%10;//0-9
P1=num[dis[0]];
d1=0;
while(++delay!=50);
delay=0;
d1=1;
P1=num[dis[1]];
d2=0;
while(++delay!=50);
delay=0;
d2=1;
P1=num[dis[2]];
d3=0;
while(++delay!=50);
delay=0;
d3=1;
}
if((keyup1==1)&&(keyup2==1))/*100次后保持数据100*/
{
d1=1;
d2=1;
d3=1;
P1=num[1];
d1=0;
while(++delay!=70);
delay=0;
d1=1;
P1=num[0];
d2=0;
while(++delay!=70);
delay=0;
d2=1;
P1=num[0];
d3=0;
while(++delay!=70);
delay=0;
d3=1;
}
/************************转动10次后清零***********************/
if ((dis[1]==1)&&(dis[0]==0)&&(keyup3==1))
{
d1=1; //保持数据010后清零
d2=1;
d3=1;
keyup3=0;
pwm1=1;
TL0=0x9b;
TH0=0x9b;
}
if(led_on==1)
{
if(i==0)
led=1;
if(fmq==0)
{
if (++t1min==1000)
{led=0;
t1min=0;
i=1;
fmq=1;
}
}
if(fmq==1)
{
if(++t1min==1000)
{i=0;
fmq=0;
t1min=0;
led_delay++;
}
}
if(led_delay==4)
{ i=0;
t1min=0;
led=0;
led_on=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -