【实验题目】
D1~D8八个发光二极管构成彩色旋转灯,D9~D13为档位指示灯,1档旋转速度最慢(周期为一秒,D13亮),2挡较快(周期为0.8秒,D12亮),3挡更快(周期为0.6s,D11亮),4挡再快(周期为0.4s,D10亮),5挡最快(周期为0.2s,D10亮)。KEY0~KEY1用于设定旋转方向为顺时针旋转或者逆时针旋转,KEY2~KEY3用于加快或减慢旋转速度。
【实验要求】
- 编写源程序并进行注释。
- 记录实验过程。
- 记录程序运行结果。
【实验具体内容】
正转(5挡):


正转(4挡):


反转(3挡):


【实验源程序】
#include"reg52.h"
#include"intrins.h"
#define unchar unsigned char
#define uint unsigned int
sbit g0=P0^4;
unchar code T_TABLE[]={200,160,120,80,40};
unchar code key_code[]={0x22, 0x12, 0x21, 0x11};
void delay()\\延时子程序
{
unchar t,ms;
ms=5;
while(ms--)
for(t=0;t<120;t++);
}
void main()\\主函数
{
int aa=0xfe;
uint dir=1;
uint speed=0;
int temp, temp2,keycode;
int j,key;
g0=0; \\设置变量
while(1)
{
P3=0x30;
temp=P3;
if((temp&0x30)!=0x30)
{
P3=0x03;
temp2=P3;
keycode=temp|temp2;
for(j=0;j<4;j++)
{
if(keycode==key_code[j])
{
key=j;
}
}
if(key==0) dir=1;
if(key==1) dir=0;
if(key==2)
{
speed++;
if(speed==5) speed=4;
}
if(key==3)
{
if(speed==0) speed++;
speed--;
}
switch(speed)
{
case 0:P0=0xef;break;
case 1:P0=0xf7;break;
case 2:P0=0xfb;break;
case 3:P0=0xfd;break;
case 4:P0=0xfe;break;
default:break;
}
P3=0x03;
while(!(P3==0x03));
}
}
if(dir==1)
{
P1=aa;
for(j=0;j<T_TABLE[speed];j++)
delay();
aa=_crol_(aa,1);//
}\\键盘扫描
if(dir==0)
{
P1=aa;
for(j=0; j<T_TABLE[speed];j++)
delay();
aa=_cror_(aa,1);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容