C语言程序,跪求注解,明天就要答辩了

2025-03-29 02:09:54
推荐回答(1个)
回答1:

  你这个应该是对寄存器的操作吧,
  #include"main.h"
#include"delay.h"

uchar scan_key(void) //返回值无符号字符类型
{
uchar i,key_value; //定义两个变量
P1 = 0xFF; //P1应该是宏定义
for(i=0;i<4;i++) // 循环,i先用再+1
{
P1 = ~(1< key_value = P1&0xF0; //把P1和0xF0相与,结果给key_value
if(key_value!=0xF0) //如果值不为0xF0,进去
{
delay_us(20); //延迟20us
key_value = P1&0xF0; //P1与0xF0相与,值给key_value
if(key_value!=0xF0) //两次相与后,再判断一次,如果不等于,就进来
{
key_value &= 0xF0; //将key_value值每一位与1相与
switch(key_value) //判断相与后的值,执行对应操作,执行完任意操作都跳出switch
{
case 0x70: key_value = 15-(3-i)*4;break;
case 0xb0: key_value = 14-(3-i)*4;break;
case 0xd0: key_value = 13-(3-i)*4;break;
case 0xe0: key_value = 12-(3-i)*4;break;
default: key_value = 0x7f; //没有符合以上条件默认置为0x7f
}
return key_value; //返回这个值
}
}
P1 = 0xFF; //在第一个if的地方如果条件不成立则让P1为0xFF,循环执行4次
}
return 0x7f; //函数返回这个值
}

uchar scan_kay(void)
{
uchar key_va1,key_va2; //定义uchar类型变量两个
1 key_va1 = scan_key(); //调用scan_key()函数,就是上面那个函数,返回值给key_va1
if(key_va1==0x7f) //判断这个返回值
{
return 0x7f; //如果返回值为0x7f,函数返回0x7f后面的不执行
}
do //如果不等于0x7f,则当key_va1与key_va2相等的时候执行scan_key,返回值给key_va2
{
key_va2 = scan_key();
}while(key_va1==key_va2);
return key_va1; //如果不相等,则函数返回开头有1的那一行的值
}
只能看到这些,这些操作使寄存器的值发生一些变化,改变硬件的状态,希望能帮到你。