📄 复件 main.c
字号:
#include<at89x52.h>
sfr PortCode = 0x80; // P0
sfr PortBit = 0xa0; // P2
#include <AT89X52.H>
unsigned char zhengz[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; // ** 正转
unsigned char fanz[] ={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; // ** 反转
bit run; // ** 开启
bit dir; // ** 方向
unsigned int speed; // ** 速度
unsigned char tmp ;
unsigned int hight;
unsigned char DispHight;
unsigned char SecCnt;
unsigned char Sec;
unsigned char code displaybit[9] = {
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; //数码管位分布(自左至右)
unsigned char code displaycode[] = {
0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; //数码管字段0,1,2,3,4,5,6,7,8,9
void delay(unsigned int Ms)
{
unsigned char i;
for( ; Ms != 0; Ms-- )
{
for(i = 1; i != 0; i-- );
}
}
void Display(unsigned int dat,unsigned char DotPosition,unsigned char ClearZeroFlag)
{
unsigned char i;
for(i = 0; i != 8; i++)
{
PortBit = 0xFF; //消除重影
if(i == DotPosition) // 小数点处理
{
PortCode = (displaycode[(dat%10)]|0x01);
}
else PortCode = displaycode[dat%10];
PortBit = displaybit[i];
if(ClearZeroFlag&&(!dat)&&(i>DotPosition)) return;
dat /= 10;
delay(255);
}
}
void initTimer(void)
{
TMOD=0x1;
TH0=0xff;
TL0=0xff;
TH1=0xff;
TL1=0xff;
}
bit half;
bit halfstart;
main()
{
initTimer();
TR0=1;
ET0=1;
// TR1=1;
ET1=1;
EA=1;
run = 0;
tmp = 0;
dir = 0;
speed = 62869; // ** 62869-> 30s 62000->40s 55000->120s
hight = 0;
half = 1;
while(1)
{
if (P3_0==0)
{
delay(100);
if (P3_0==0) // ** 上升
{
run = 1;
dir = 1;
hight = 11037;
halfstart = 1;
}
}
else if (P3_1==0)
{
delay(100);
if (P3_1==0) // ** 下降
{
run = 1;
halfstart = 1;
if (half)
{
hight = 3660;
}
else
{
hight = 11037;
}
dir = 0;
}
}
else if (P3_2==0)
{
delay(100);
if (P3_2==0) // ** 停止
{
run = 0;
halfstart = 0;
Sec = 0;
}
}
if (dir)
DispHight = 180 - hight/61;
else
DispHight = hight/61;
Display(DispHight,8,1);
}
}
// ** 50 set minue
void timer0(void) interrupt 1
{
TH0=speed/256;
TL0=speed%256;
if (run&&hight)hight--;
if (hight==0){run = 0;}
if (!run) P1 = 0x0f;
else
{
if (dir)
P1 = zhengz[tmp];
else
P1 = fanz[tmp];
tmp ++ ;
if (tmp>8)tmp = 0;
}
}
/*
void timer1(void) interrupt 3
{
TL1=0xb0;
TH1=0x3c;
SecCnt ++;
if (SecCnt==20)
{
Sec++;
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -