c语言方向键控制程序关键词,C语言关键字(部分)

1)非常见:auto、register、volatile、goto

2)存储相关:const、extern、register、volatile、static、auto、signed、unsigned

3)数据类型:char、short、int、float、long、double、struct、union、enum、void

4)逻辑控制:if、else、for、while、do、break、continue、return、default、switch、case、goto

5)特殊用途:sizeof、typedef

auto:

auto在定义变量的时候可以自动检测变量类型。——>int a=1,等同于auto a=1;   float b=1.11;等同于 auto b=1.11;

auto修饰局部变量,表示这个变量是自动局部变量,自动局部变量分配在栈上。(既然是分配在栈上,说明他如果不初始化的话那么值就是随机的,全局变量的值初始化是0)

平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。auto的局部变量其实就是默认定义的普通的局部变量。

register :register关键字不常用,作用就是:用register修饰的变量编译器会尽量把它分配子寄存器中。(平时分配的一般变量都是在内存中)。分配在寄存器中用法是一样的,但是读写效率会高很多。所以说register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问速度可以极大的提升程序运行效率。register编译器只能承诺尽量将register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。主要原因是因为寄存器数量有限,不一定有用。(有些编译器会自动优化,就是把变量复制到cpu寄存器中。)

extern :

extern主要用来声明全局变量,声明的目的主要是在a.c中定义全局变量整个工程中都能使用该变量。(一个工程中同样的全局变量只能有一个。)

static :

用来修饰局部变量,形成静态局部变量。静态局部变量存储在 全局区(静态区),局部变量存储在栈区(跟函数参数值一样)。作用域是所在函数。

用来修饰全局变量,形成静态全局变量。静态全局变量存储在 全局区(静态区)。作用域是自身所在文件。(全局变量作用域是整个工程)

volatile:

一个定义为volatile 的变量是说这变量可能会被意想不到地改变。优化器在用到这个变量时必须每次都小心地重新读取内存中的值,而不是使用保存在寄存器里的备份值。 如果将将变量加上volatile,则编译器对此变量的读写操作不会被优化 。

volatile 用途:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;(如:标志变量)

2、多任务环境下各任务间共享的标志应该加volatile;

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;

const:

const 修饰的变量具有只读的属性而且是全局的。const修饰的可以取地址,就是说指针可以指向它。而#define 定义的常亮是不能取地址的。

code:

标准C语言中没有。在单片机中code可以把常数和表格之类的放到ROM中去以节省RAM。(rom只读内存)

goto:从一下列子中可以看出 goto 可以跳出多重循环,跳到标号位置程序继续执行。但goto在程序太大了的时候,如果程序出错,很难调试找出错误,要慎用goto。

int  main()

{

int i = 1;

while(1)

{

printf("在while(1)里

");

while(i++)

{

printf("i = %d

",i);

if(i > 3)

{

goto TiaoChu;

}

}

}

TiaoChu:

printf("程序结束

");

return 0;

}

c语言实现单片机的键盘程序 #include "SST89x5x4.H" #include #define uchar unsigned char #define uint unsigned int #define _Nop() _nop_() unsigned char code Key_Value_Table[16]={0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff, 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; void Key_Init(void); unsigned char GetScanKey(void); unsigned char GetKey(void); void LCD_Init(void); void LCD_Init2(void); //void WriteW(uint a); void CheckBF(void); unsigned char Key_ASC2(unsigned char); void WritD(unsigned char); void Delay_ns(int i); void Delay_ms(int ms); unsigned char key; unsigned char key_asc2; unsigned char bKeyUp_Flag; uchar xdata *ptr; //函数功能描述:键盘初始化,将标志位置1; void Key_Init(void) { bKeyUp_Flag=1;//标志(全局变量)位置1 } //函数功能描述:键盘扫描函数,得到键的行列位置; unsigned char GetScanKey(void) { unsigned char key, i, temp; unsigned char xdata * ptr; key=0xff; for (i=1; i<0x10; i<<=1) //i的低4位为行数位,行依次检测 循环4次 { ptr=0x8fff; //数码管位选地址 * ptr =i; temp = * ptr; //取键盘IO口的值 temp &= 0x0f; //屏蔽高四位 if (temp!=0x00) //是否有有效键值 { key = i<<4; //取行数位的值并将其放入返回值高4位 key|=temp; //列数位的值放入返回值低4位 break; } } return key; //返回行位(高四)和列位(低四) } /*函数功能描述:取键值,长按无效; unsigned char code Key_Value_Table[16]={0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff, 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; 说明:计算因子,定义在函数外部。此数组在计算键值的中间过程起作用。比如右下方键按下(行列值为0x88),通过查找数组得到行对应的中间值0x03,列对应的中间值0x03。 */ unsigned char GetKey(void) { unsigned char key, temp; if (!bKeyUp_Flag) //判断标志,是0执行 /*按键程序执行一次后会将bKeyUp_Flag标志位清零,执行此段程序,长按键无效返回无效值,直至按键无效返回无效按键值,置"1"标志位。按键输入恢复有效。屏蔽这部分则长按键有效*/ { key=GetScanKey(); if (key==0xff) //没有按键,置标志位 bKeyUp_Flag=1; else //保持按键 return 0xff; //因为0xff大于15,故为无效键值,实现长按键无效 } key=GetScanKey(); if (key==0xff) //没有按键 return key; else //有按键有效 temp=key; //取键值 Delay_ms(20); //延时20ms 消抖 key=GetScanKey(); //键盘扫描 if(key!=temp) //判断两次键值是否相同,排除干扰信号影响 确认有效信号 { key=0xff; return key; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值