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

📄 jisuanqu.c

📁 用c51编的 键盘输入的乘法运算
💻 C
字号:
/*键盘输入数据完成乘法计算程序*/

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

   	sbit pclk = P0 ^ 2;
	sbit sdata =P0 ^ 3;
	sbit smg4 = P0 ^ 7;
	sbit smg3 = P0 ^ 6;
	sbit smg2 = P0 ^ 5; 
	sbit smg1 = P0 ^ 4;

uchar idata disp[ 4 ];
code uchar dispcode[10] = {0xb7,0x90,0x3d,0xb9,0x9a,
                           0xab,0xaf,0xb0,0xbf,0xbb};//数码管对应的顺序码
/* 名称: delay1ms
* 说明: 
* 功能: 延时
* 调用:_nop_
* 输入: 延时长短数据 
* 返回值: 无*/
void delay1ms(uchar j)//延迟1MS
{
	uchar i;
	while(j)
	{
		for( i = 248; i > 0; i-- )
		{
		      _nop_( );//延时
		      _nop_( );
		}
		j--;
	}
}

/* 名称: send_0
* 说明: 
* 功能:把一个字节按段的顺序送到数码管显示
* 调用:
* 输入:要显示的十六进制码  
* 返回值: 无*/
void send_0(uchar ch)  
{
   uchar i;
   for(i=0;i<8;i++)
   {
      pclk = 0;
      ch<<=1;         //右移一位
      sdata = CY;
      pclk = 1;
      pclk = 0;
   }
}

/*
*名称:senf_f
* 说明: 
* 功能:发送四字节到数码管
* 调用:send_0()
* 输入: 四位要显示得的数值
* 返回值: 无*/
void sent_f(uchar s3,uchar s2,uchar s1,uchar s0)  
{
   P0 = 0x00;  //初始化
   send_0(dispcode[s3]);//第一个数码管显示
   smg1 = 1;
   delay1ms(1);// 延时
   P0 = 0x00;
   send_0(dispcode[s2]);//第二个数码管显示
   smg2 = 1;
   delay1ms(1);
   P0 = 0x00;
   send_0(dispcode[s1]);//第三个数码管显示
   smg3 = 1;
   delay1ms(1);
   P0 = 0x00;
   send_0(dispcode[s0]);//第四个数码管显示
   smg4 = 1;
   delay1ms(1);
   P0 = 0x00;
}

/*名称: sure_disk
* 说明: 
* 功能: 按键识别
* 调用:sent_f()
* 输入:  
* 返回值: 按键对应的数值*/
uchar sure_disk()  
{
   uchar j;
   uchar key,keyvalue;
   uchar sccode,recode;
   P2=0x0f;            /*发0行扫描码*/

   if((P2 & 0x0f)!= 0x0f)       /*若有键按下*/
   {
   delay1ms(1);				   //去抖
    if((P2&0x0f)!= 0x0f)       /*逐行扫描初值*/
     {
       sccode=0xfe;
       for(j=4;j>0;j--)
       {
       while((sccode&0x10)!=0)
        {
          P2=sccode;            /*输出行扫描码*/
          if((P2&0xf0)!=0xf0)   /*本行有键按下*/
           {
             recode=(P2&0xf0)|0x0f;

             key=((~sccode)+(~recode));  /*返回特征字节码*/
        	}
            else
            sccode=(sccode<<1)|0x01;       /*行扫描码左移一位*/
         }
      }
     } 
    }
    switch(key) //判断键特征值
    {
         case 0x88: keyvalue=0;	   
                break;
         case 0x84: keyvalue=1;
                break;
         case 0x82: keyvalue=2;
                break;
         case 0x81: keyvalue=3;
                break;
         case 0x48: keyvalue=4;
                break;
         case 0x44: keyvalue=5;
                break;
         case 0x42: keyvalue=6;
                break;
         case 0x41: keyvalue=7;
                break;
         case 0x28: keyvalue=8;
                break;
         case 0x24: keyvalue=9;
                break;
         case 0x22: keyvalue=10;
                break;
         case 0x21: keyvalue=11;
                break;
         case 0x18: keyvalue=12;
                break;
         case 0x14: keyvalue=13;
                break;
         case 0x12: keyvalue=14;
                break;
         case 0x11: keyvalue=15;
                break;
         default:   keyvalue=16; //无键按下,返回0值
                break;
		}
	return(keyvalue);			                          
}

/*主函数*/
void main ( void )
{
 uchar j,a=0;   
 char i;
 uint add,c1,c2;
 for(j=0;j<4;j++)//赋初值
 disp[j]=0;
 sent_f(disp[0],disp[1],disp[2],disp[3]);
 j=2;
 while(1) 
 {
 
  P2=0xf0;
  if((P2&0xf0)!=0xf0)//判断是否有按键
   {
       delay1ms(1);//延时
        if((P2&0xf0)!=0xf0)//判断是否有按键
	    {
		   if(sure_disk()<10)//判断返回数值
		   {  if(a==0)
               disp[3]=sure_disk();
			   if(a==1)
			   {
			     a=0;
				 disp[2]=disp[3];
				 disp[3]=sure_disk();
			   }a++;
		   }
	        if(sure_disk()==10)
	        {
			     c1=disp[2]*10+disp[3];//存储数据
				 for(i=3;i>=0;i--)
				 disp[i]=0;
			}
			if(sure_disk()==11)
			{
			    c2=disp[2]*10+disp[3];
               for(i=3;i>=0;i--)
				 disp[i]=0;
				add=c1*c2;
			           disp[0]=add/1000;
					   disp[1]=(add/100)%10;
					   disp[2]=(add/10)%10;
					   disp[3]=add%10;
			
			}
	   
 	   }
   }
  sent_f(disp[0],disp[1],disp[2],disp[3]);
 }
}


⌨️ 快捷键说明

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