山东大学单片机实验:3.4 矩阵键盘扫描实验

【实验题目】  

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
喜欢就支持以下吧
点赞2赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容