📄 自动升降旗程序.txt
字号:
#include<at89x51.h>
unsigned char code shuzi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};
unsigned char code dianji[]={0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe,0xf6};
unsigned char ban;
void guoqi(unsigned int a) ;
unsigned int h,dh,mainh; //定义国旗所在的高度h,给定的高度dh,和总高度mainh
unsigned char key() //键盘扫描
{
unsigned char a;
P1=0x0f;
a=P1;
a|=0xf0;
P1=a;
a=P1;
P1=0x0f;
return a; //得到键盘所按下键的键值
}
void ms(unsigned int Delay) //延时函数
{
unsigned int a;
for(;Delay>0;Delay--)
for(a=0;a<114;a++) //1ms循环114次
{;}
}
void dingshi1() //定时器设置
{
TMOD=1; //使用定时器0方式1
TH0=0x29; //给定时器赋初值
TL0=0x02;
TR0=0; //关定时器
}
void dingshi2() //定时器赋初值
{
TF0=0; //定时器溢出中断标志位清零
TH0=0x29; //定时器重新赋初值
TL0=0x02;
}
void xianshi(unsigned int a) //数码管显示
{
a=a/4;
TI=0;
SBUF=shuzi[a/100]+128; //显示百位的数值
while(!TI);
TI=0;
SBUF=shuzi[a/10%10]; //显示十位的数值
while(!TI);
TI=0;
SBUF=shuzi[a%10]; //显示个位的数值
while(!TI);
TI=0;
}
void display()
{
unsigned char a;
unsigned int change_h;
while(1)
{
P1=0x0f;
while(P1==0x0f); //有键按下,退出循环
a=key();
if(a==0xee) {if(P0_1==1){dh=mainh;P0_1=1;guoqi(dh);break;}
if(P0_1==0){dh=mainh;guoqi(dh);
dh=0;guoqi(dh);
dh=mainh;P0_1=1;guoqi(dh);break;}
}
//升旗
if(a==0xed) {dh=0;P0_1=1;break;
if(P0_1==1){dh=0;P0_1=1;guoqi(dh);break;}
if(P0_1==0){dh=mainh;guoqi(dh);
dh=0;P0_1=1;guoqi(dh);break;}
}//降旗
if(a==0xeb) { P0_1=0;ban=1;dh=mainh;guoqi(dh); if(ban){guoqi(h*2/3); ban=0;}
break;} //半旗
if(a==0xe7) xianshi(change_h); //显示高度
if(a==0xde) if(change_h<=(mainh-40)) {change_h+=40;xianshi(change_h);} //以每10cm加高度
if(a==0xdd) if(change_h>=40) {change_h-=40;xianshi(change_h);} //以每10cm减高度
if(a==0xdb) {dh=change_h;P0_1=1;break;} //开始
ms(300); //延时300ms
}
}
void guoqi(unsigned int a) //升降旗
{
TR0=1; //开定时器
if(a==mainh) P0_2=0;
while(1)
{
if(TF0) //检测定时器溢出标志位
{
dingshi2();
if(h==a) break;
if(a>h) h++;
else h--;
P2=dianji[h%8];
if(h>10) P0_2=1;
xianshi(h);
}
P1=0x0f; //检测停止
if(key()==0xd7) {P0_1=1;break;} //按停止键
if((P2_5||P2_7)==0) break;
}
TR0=0;
}
void main(void)
{
dingshi1();
h=0;
xianshi(0);
mainh=720; //电机转720拍,共180cm
while(1)
{
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -