⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 键盘_42bygh.c

📁 里面包含了多个C语言模块设计题目
💻 C
字号:
#include <AT89X52.h>
#define uint unsigned int 
uint k,i,j,num,w,count;
  
  step_index,speedlevel,
  spcount,
  stop_flag =0;
 uint num_temp;
uint led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint vote[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
sbit led0=P3^0;
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;
void delay(void);
void ledwork(void);
void gorun();
bit turn;
void Getch ( );

void main(void)
{
  count = 0;
  step_index = 0;
  num=6;
  stop_flag = 0;
  P3=0x00;
   TMOD= 0x11;  //////T1 ,  T0  16位模式   

    EA=1;
	ET1=1;   
    TH1=0xff;          /*设置初始值,每隔4ms一次中断*/
    TL1=0x05;
    TR1=1;
     turn = 1;
     speedlevel =1;

	 	 while(1)
		 {
		    P2=0xff;			     	
		    Getch();
			}
      }


void delay(void) //延时程序
{
for(j=1000;j>0;j--);
}
void Getch ( )
{
unsigned char X,Y,Z;
P2=0x0f;           //先对P2 置数行扫描
if(P2!=0x0f)       //判断是否有键按下
{
delay();           //延时,软件去干扰
if(P2!=0x0f)       //确认按键按下X = P2;
{
X=P2;              //保存行扫描时有键按下时状态
P2=0xf0;           //列扫描
Y=P2;              //保存列扫描时有键按下时状态
Z=X|Y;             //取出键值
switch ( Z )       //判断键值
{
case 0x7e: k=0; break; //对键值赋值
case 0x7d: k=1; break;
case 0x7b: k=2; break;
case 0x77: k=3; break;
case 0xbe: k=4; break;
case 0xbd: k=5; break;
case 0xbb: k=6; break;
case 0xb7: k=7; break;
case 0xde: k=8; break;
case 0xdd: k=9; break;
case 0xdb: k=10;break;
case 0xd7: k=11;break;
case 0xee: k=12;break;
case 0xed: k=13;break;
case 0xeb: k=14;break;
case 0xe7: k=15;break;
    }
if(k<12)
	num=k;
  else if(k==12)turn=!turn;

    if(num>=0&&num<10)
      w=0;
    else if(num>9&&num<100)
	  {w=1;i=i%2;}
	else if(num>100&&num<1000)
	  {w=2;i=i%3;}
	else if(num>=1000)
	  {w=3;i=i%4;}
   for(j=0;j<20000;j++);
   P2=0xff; 

   }
  }
}
void ledwork(void)   /*数码管工作函数*/
{     
      if(num>=0&&num<10)
      w=1;
       else if(num>9&&num<100)
	    {w=2;i=i%2;}
	   else if(num>100&&num<1000)
	      {w=3;i=i%3;}
	      else if(num>=1000)
	      {w=4;i=i%4;}

  if(i==0)  {P0=led[num%10];led1=1;led2=1;led3=1;led0=0;}
  else if(i==1&&w>1)  {P0=led[num/10%10];  led0=1;led2=1;led3=1;led1=0;}
  else if(i==2&&w>2)  {P0=led[num/100%10]; led1=1;led2=1;led3=1;led2=0;}
  else if(i==3&&w>3)  {P0=led[num/1000%10];led0=1;led1=1;led2=1;led3=0;}
 } 



//定时器1定时中断,驱动电机用
void timer1(void) interrupt 3
{
  TH1=0xFF;
  TL1=0x55; //设定时每隔0.5ms中断一次
  count++;
  spcount--;
  if(spcount<=0)
	 {spcount =num*speedlevel;
      gorun(); }  
    i++;
    i=i%w;
    ledwork();
}



void gorun()
{ 
  if(stop_flag==1)
  {    
    P1=0x00;
    return;
  }

  P1=vote[step_index];  //给脉冲以驱动电机

  if (turn==0)
  {
    step_index++;
    if (step_index>7)
      step_index=0;
  }
  else
  {
    step_index--;
    if (step_index<0)
      step_index=7;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -