<stdio.h>
#include
<stdlib.h>
/////////////////////整个程序是链表的创建删除等功能
struct
node
{
int
date
struct
node*next
}Linklist1,linklist2
int
Length(struct
node
*head)
//////////////////////求已知的链表的长度
int
Locate(struct
node
*
p,int
n)
//////////求链表中n节点的位置
int
Find(struct
node
*
p,
int
n)
/////////////////求链表中第n个节点的值
int
Next(struct
node
*
p,
int
n)
//////////值为n的节点的前一个节点值
int
Previous(struct
node
*
p,
int
n)//////////值为n的节点的后一个节点值
void
Traverse(struct
node
*head)
////////////////遍历链表
void
CreateFromHead(struct
node
**p)
/////从表头建立链表
void
CreateFromTail(struct
node
**q)
/////从表尾建立链表
int
Insert(struct
node
**p,
int
x,
int
n)
/////////第n个位置插入数据x
int
Delete(struct
node
**p,int
n)
//////////////删掉第n个位置的节点
你这个应该是对寄存器的 *** 作吧,#include"main.h"
#include"delay.h"
uchar scan_key(void)//返回值无符号字符类型
{
uchar i,key_value//定义两个变量
P1 = 0xFF //P1应该是宏定义
for(i=0i<4i++) // 循环,i先用再+1
{
P1 = ~(1<<i) //循环里执行P1 =i左移一位,i为局部变量没有初始化值为随机,每次进来都不一样
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)*4break
case 0xb0: key_value = 14-(3-i)*4break
case 0xd0: key_value = 13-(3-i)*4break
case 0xe0: key_value = 12-(3-i)*4break
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的那一行的值
}
只能看到这些,这些 *** 作使寄存器的值发生一些变化,改变硬件的状态,希望能帮到你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)