编译指令
编译指令 | 说明 |
#include | 包含另一个文件 |
#define | 定义一个宏(macro)或是常量 |
#undef | 取消一个宏常量的定义 |
#asm和#endasm | 在程序中加入汇编语言的程序 |
#ifdef、#ifndef、#else、#endif | 用于条件式的编译 |
注解://—单行注解;/*多行注解*/
基本数据类型 (int,float,double,char,void)
数据类型 | 类型说明 | 长度(位) | 数据长度 |
bit | 位 | 1 | 0,1 |
char | 字符 | 8 | —128~127 |
unsigned char | 无符号字符 | 8 | 0~255 |
signed char | 有符号字符 | 8 | —128~127 |
int | 整型 | 16 | —32768~32767 |
short int | 短整型 | 16 | —32768~32767 |
unsigned int | 无符号整型 | 16 | 0~65535 |
signed int | 有符号整型 | 16 | —32768~32767 |
long int | 长整型 | 32 | —2147483648~2147483647 |
unsigned long int | 无符号长整型 | 32 | 0~4294967295 |
signed long int | 有符号长整形 | 32 | —2147483648~2147483647 |
float | 浮点数(实数) | 32 | 0.175e-38~0.402e38 |
double | 双精度浮点 | 32 | 0.175e-38~0.402e38 |
void | 空 | 0 | 没任何数据 |
用户自定义数据类型格式
typedef struct{
数据类型 变量序列1;
数据类型 变量序列1;
...
}自定义数据类型的名称;
保留字
_at_,alien,bdata,break,bit,case,char,code,compact,const,continue,data,
default,do,double,far,else,enum,extern,float,for,goto,if,funcused,idata,int,
inline,interrupt,large,long,pdata,_priority_,reentrant,return,sbit,sfr,sfr16,
short,sigend,sizeof,small,static,struct,switchc_task_,typedef,using,union,
unsigned,void,volatile,while,xdata
常量表示法
字符串常量符号常数 | 规则 | 范例 |
十进制 | 一般十进制格式 | 1234567890 |
二进制 | 开头加上0b | 0b00001110 |
八进制 | 开头加上O | O0123 |
十六进制 | 开头加上0x | 0xFF45 |
无符号整数常量 | 结尾加上U | 30000U |
长整数常量 | 结尾加上L | 299L |
无符号长整数常量 | 结尾加上UL | 327800UL |
浮点数的常量 | 结尾加上F | 4.234F |
字符常量 | 以单引号括起来 | ‘a’ |
字符串常量 | 以双引号括起来 | “hello” |
-----------------------------------------------------运算符-----------------------------------------------------
算术运算
运算符 | 说明 | 范例 | 执行结果 |
+ | 加 | c=a+b; | c 等于10 |
— | 减 | d=a—b; | d 等于6 |
* | 乘 | e=a*b; | e 等于16 |
/ | 除 | f=a/b; | f 等于4 |
% | 取余数 | g=a%b; | g 等于0 |
++ | 加1 | c++;相当于c=c+1; | c 等于11 |
—— | 减1 | d——;相当于d=d—1; | d 等于5 |
= | 等于 | a=8; | 设置a等于8 |
+= | 先相加在等于 | e+=5;相当于e=e+5; | e 等于21 |
—= | 先相减在等于 | f—=5;相当于f=f—5; | f 等于—1 |
*= | 先相乘在等于 | b*=5;相当于b=b*5; | b 等于0 |
/= | 先相除在等于 | a/=5;相当于a=a/5; | a 等于1 |
%= | 先取余数在等于 | a%=5;相当于a=a%5; | a 等于3 |
※假设a等于8,b等于2
比较运算
运算符 | 说明 | 范例 | 执行结果 |
== | 等于 | a==5 | F |
!= | 不等于 | a!=5 | T |
< | 小于 | a<5 | F |
> | 大于 | a>5 | T |
<= | 小于等于 | a<=5 | F |
>= | 大于等于 | a>=5 | T |
※比较运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8
逻辑运算
运算符 | 说明 | 范例 | 执行结果 |
&& | AND | (a>5)&&(a<10) | T |
|| | OR | (a<5)||(a>10) | F |
! | NOT | !(a>10) | T |
※逻辑运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8
位逻辑运算
运算符 | 说明 | 范例 | 执行结果 |
& | AND | a&0x01 | a等于1 |
| | OR | a|0x80 | a等于0x85 |
~ | NOT | ~a | a等于0xFA |
^ | XOR | a^0xFF | a等于0xFA |
<< | 左移 | a<<1 | a等于0x0A |
>> | 右移 | a>>1 | a等于0x0A |
※假设a等于5
----------------------------------------------------控制命令---------------------------------------------------
if语句
if(条件) 语句1;
else 语句2;
例:if(d==4) d=0; //如果d等于4就设置d等于0
else d++; //否则就将d加1
if(ticks==0) { //如果ticks等于0
ticks=1000; //ticks 设置成1000
counter[0]++; //counter[0]加1
}
嵌套if语句
例:if(counter[0]==10) {
counter[1]++;
counter[0]=0;
if(counter[1]==10) {
counter[2]++;
counter[1]=0;
}
}
switch语句
switch (变量) {
case 常量1:语句1; break;
case 常量2:语句2; break;
case 常量3:语句3; break;
......
default ; 语句n;
}
for循环
for (初值,条件,变化值) 语句;
例:for(i=0;i<10;i++) x=x+i;
for(i=1;i<10,i++)
for(j=1;j<10,j++)
printf(“%d %d”,i,j);
无穷循环:
for( ; ; );
while循环
while (条件) 语句;
例:while (ch!=!’A’) ch=getche();
无穷循环:
while(1);
do/while循环
do {
语句;
...
} while(条件);
例:do {
ch=getche();
} while (ch!=”A”);
goto语句
loop1:
x++;
if(x<100) goto loop1;
----------------------------------------------------指针和函数------------------------------------------------
指针的定义
数据类型 *指针变量的名字;
例: char *p;
int *x;
指针与数组
例: char filename[80];
char *p;
p=filename; //指针p存放filename的开始地址
int x[5]={1,2,3,4,5};
int *p,sum,i;
p=x; //指针p存放数组x的开始地址
for(i=0;i<5;i++)
sum=sum+p[i]; //p[i]相当于x[i]
指针的运算
1.针变量前面加上*号就是取得指针所指向位置的内容。
例:int x[5]={1,2,3,4,5};
int *p;
p=x; //指针p存放数组x的开始地址
*p=10; //相当于设置x[0]等于10
2.变量前面加上&符号,可以取得一个变量的位置。
例:int x,y;
int *p;
p=&x; //指针p存放x的地址,相当于p是指向x 的指针
*p=1; //相当于设置x等于1
3.&符号也可以加在数组的前面
例:int x[5];
int *p;
p=&x[2]; //指针p存放x[2]的地址,相当于p是指向x[2]的指针
*p=50; //相当于设置x[2]等于50
函数
函数类型 函数名称(参数序列);
参数说明
{
函数的主体
}
例:void delay (void) { //不返回任何数据的函数
unsigned char i,j; //没有任何参数的函数
for(i=0,i<255,i++)
for(j=0,j<255,j++);
}
main()
{
...
delay(); //调用函数
}
例:unsigned char sum(unsigned chat a,unsigned chat b)
{
unsigned chat x;
check_GLCD_busyflag(); //函数中可以调用另一个函数
x=a+b;
return x; //return会返回x的数据
}
中断服务函数
void 中断服务程序的名称(void) interrupt 中断号码 using 寄存器组号码
{
中断服务子程序主体
}
中断号码
#define IE0_VECTOR 0 //0x03
#define TF0_VECTOR 1 //0x0B
#define IE1_VECTOR 2 //0x13
#define TF1_VECTOR 3 //0x1B
#define SIO_VECTOR 4 //0x23
对于S51有定时器2
#define TF2_VECTOR 5 //0x2B
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论