编译指令
://—单行注解;/*多行注解*/
基本数据类型(i n t,f l o a t,d o u b l e,c h a r,v o i d)
用户自定义数据类型格式
t y p e d e f s t r u c t{
数据类型变量序列1;
数据类型变量序列1;
...
}自定义数据类型的名称;
保留字
_a t_,a l i e n,b d a t a,b r e a k,b i t,c a s e,c h a r,c o d e,c o m p a c t,c o n s t,c o n t i n u e,d a t a,
d e f a u l t,d o,d o u b l e,f a r,e l s e,e n u m,e x t e r n,f l o a t,f o r,g o t o,i f,f u n c u s e d,i d a t a,i n t, i n l i n e,i n t e r r u p t,l a r g e,l o n g,p d a t a,_p r i o r i t y_,r e e n t r a n t,r e t u r n,s b i t,s f r,s f r16, s h o r t,s i g e n d,s i z e o f,s m a l l,s t a t i c,s t r u c t,s w i t c h c_t a s k_,t y p e d e f,u s i n g,u n i o n, u n s i g n e d,v o i d,v o l a t i l e,w h i l e,x d a t a
常量表示法
-----------------------------------------------------运算符----------------------------------------------------- 算术运算
比较运算
比较运算结果是个布尔值既。假设a等于8
逻辑运算
逻辑运算结果是个布尔值既。假设a等于8
位逻辑运算
假设a等于5
----------------------------------------------------控制命令--------------------------------------------------- i f语句
i f(条件)语句1;
e l s e语句2;
例:i f(d==4)d=0;//如果d等于4就设置d等于0
e l s e d++;//否则就将d加1
i f(t i c k s==0){//如果t i c k s等于0
t i c k s=1000;//t i c k s设置成1000
c o u n t e r[0]++;//c o u n t e r[0]加1
}
嵌套i f语句
例:i f(c o u n t e r[0]==10){
c o u n t e r[1]++;
c o u n t e r[0]=0;
i f(c o u n t e r[1]==10){
c o u n t e r[2]++;
c o u n t e r[1]=0;
}
}
s w i t c h语句
s w i t c h(变量){
c a s e常量1:语句1;b r e a k;
c a s e常量2:语句2;b r e a k;
c a s e常量3:语句3;b r e a k;
......
d e f a u l t;语句n;
}
f o r(初值,条件,变化值)语句;
例:f o r(i=0;i<10;i++)x=x+i;
f o r(i=1;i<10,i++)
f o r(j=1;j<10,j++)
p r i n t f(“%d%d”,i,j);
无穷循环:
f o r(;;);
w h i l e循环
w h i l e(条件)语句;
例:w h i l e(c h!=!?A?)c h=g e t c h e();
无穷循环:
w h i l e(1);
d o/w h i l e循环
d o{
语句;
...
}w h i l e(条件);
例:d o{
c h=g e t c h e();
}w h i l e(c h!=”A”);
g o t o语句
l o o p1:
x++;
i f(x<100)g o t o l o o p1;
----------------------------------------------------指针和函数------------------------------------------------
指针的定义
数据类型*指针变量的名字;
例:c h a r*p;
i n t*x;
指针与数组
例:c h a r f i l e n a m e[80];
c h a r*p;
p=f i l e n a m e;//指针p存放f i l e n a m e的开始地址
i n t x[5]={1,2,3,4,5};
i n t*p,s u m,i;
p=x;//指针p存放数组x的开始地址
f o r(i=0;i<5;i++)
s u m=s u m+p[i];//p[i]相当于x[i]
1.针变量前面加上*号就是取得指针所指向位置的内容。
例:i n t x[5]={1,2,3,4,5};
i n t*p;
p=x;//指针p存放数组x的开始地址
*p=10;//相当于设置x[0]等于10
2.变量前面加上&符号,可以取得一个变量的位置。
例:i n t x,y;
i n t*p;
p=&x;//指针p存放x的地址,相当于p是指向x 的指针
*p=1;//相当于设置x等于1
3.&符号也可以加在数组的前面
例:i n t x[5];
i n t*p;
p=&x[2];//指针p存放x[2]的地址,相当于p是指向x[2]的指针
*p=50;//相当于设置x[2]等于50
函数
函数类型函数名称(参数序列);
参数说明
{
函数的主体
}
例:v o i d d e l a y(v o i d){//不返回任何数据的函数
u n s i g n e d c h a r i,j;//没有任何参数的函数
f o r(i=0,i<255,i++)
f o r(j=0,j<255,j++);
}
m a i n()
{
...
d e l a y();//调用函数
}
例:u n s i g n e d c h a r s u m(u n s i g n e d c h a t a,u n s i g n e d c h a t b)
{
u n s i g n e d c h a t x;
c h e c k_G L C D_b u s y f l a g();//函数中可以调用另一个函数
x=a+b;
r e t u r n x;//r e t u r n会返回x的数据
}
中断服务函数
v o i d中断服务程序的名称(v o i d)i n t e r r u p t中断号码u s i n g寄存器组号码
{
中断服务子程序主体
}
中断号码
#d e f i n e I E0_V E C T O R0//0x03
#d e f i n e T F0_V E C T O R1//0x0B
#d e f i n e I E1_V E C T O R2//0x13
#d e f i n e T F1_V E C T O R3//0x1B
#d e f i n e S I O_V E C T O R4//0x23
对于S51有定时器2
#d e f i n e T F2_V E C T O R5//0x2B
例:s t a t i c v o i d x i n t0_i s r(v o i d)i n t e r r u p t I E0_V E C T O R(或0)u s i n g1 {
u n s i g n e d c h a r i,j=0x F F;
f o r(i=0,i<16,i++)
{
j++;
P1=j;//将数值输出到P1口
d e l a y_4i s r();
}
}
-----------------------------------------------------汇编语言--------------------------------------------------
在C中加入汇编语言
例:v o i d d e l a y100u s()
{
#p r a g m a a s m
m o v r7,#1
m o r e:m o v r3,#48
d j n z r3,$
d j n z r7,m o r e
#p r a g m a e n d a s m
}
----------------------------------------------------宏(macro)----------------------------------------------
宏的定义
%*d e f i n e(m a c r o名称)(m a c r o的指令)
例:%*d e f i n e(w r i t e_1)(
s e t b D I
s e r b S K
c l r S K
)
#d e f i n e宏的名称宏的指令
例:#d e f i n e u c h a r u n s i g n e d c h a r