C语言学习笔记(基于单片机)

目录

一、关键字部分

static

code

const

extern

bit

sbit

sft

struct(结构体)

1、结构体的初始化

2、结构体的赋值

3、应用

data idata pdata xdata 与 code

二、运算符部分

逗号运算符[ , ]

 运算符[ -> ]

位运算符-按位异或[ ^ ]    按位或[ | ]

左移运算符[<<]

三、其他

i++和++i的区别

u16和u32

字符串与字符数组

去余的几个特殊数值

常用格式化说明符

float与double


一、关键字部分

static

仅将变量初始化一次,第二次调用时不进行初始化

code

将数据存储在ROM中(写入后不能再更改)

const

将数据存储在RAM中(写入后不能再更改)

extern

extern关键字可以使变量或者函数跨文件被访问

用法:
int a=5;           //第一个文件
extern  int a;     //需要用到外部变量的文件

bit

bit是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1

用法:
bit mode=0;
bit=!mode;   //或bit=~mode

sbit

sbit是C51编译器的一种扩充数据类型,用于将特殊功能寄存器中的某一位赋值给一个变量

sbit P00        =   P0^0;
sbit P01        =   P0^1;
sbit P02        =   P0^2;
sbit P03        =   P0^3;

sft

sfr是C51编译器的一种扩充数据类型,用于将一整个特殊功能寄存器赋值给一个变量

sfr P0          =   0x80;
sfr P1          =   0x90; 

struct(结构体)

struct关键词表示接下来是一个结构体

结构体本质上是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同

1、结构体的初始化

struct fruit{        //fruit是结构体名
    char type[20];       
    int num;               
}F1;                 //F1是结构体变量名(的前缀)

2、结构体的赋值

struct fruit F1={"apple",1024};

//或:
//struct fruit{        
//    char type[20];       
//    int num;               
//}F1={"apple",1024};                

3、应用

data idata pdata xdata 与 code

data  可将变量放入内部RAM的低八位

idata 可将变量放入内部RAM的高八位

pdata 可将变量放入外部RAM的低256个字节

xdata 可将变量放入外部RAM的所有字节

code 可将变量放入ROM中(写入后不能更改)

二、运算符部分

逗号运算符[ , ]

逗号表达式中用逗号分开的表达式分别求值,以最后一个表达式的值作为整个表达式的值。

 运算符[ -> ]

若有一个结构体person,结构体中有一个变量age,

则 i = person->age的意思是提取结构体成员变量age的值,并赋值给变量i

位运算符-按位异或[ ^ ]    按位或[ | ]

[ ^ ] 按照每一位(bit),相同为0,相反为1

[  | ] 两个二进制对应的位只要有一个为1,新的二进制相对的位就为1

x=0001 0010
y=0100 1111
x^y=0101 1101        (x|y=0101 1111)


a=0101 1100
a^0xff;  //a=1010 0010     a^0xff,相当于a=~a

左移运算符[<<]

最低位到前一位后,最低位补0;

a = 1001 1101
b = a<<1    //b=0011 1010


notes:与循环移位函数(_cror_  _crol_)区别:  最高最低位不进行补位,而是进行循环
a = 1234 5678
b = _crol_(a,1)   //b=2345 6781

三、其他

i++和++i的区别

i++后自增,先赋值,
++i先自增,后赋值;

if(i++){//};       //i现在if中进行判断,再自增

u16和u32

#define u8 unsigned char
#define u32 unsigned int

字符串与字符数组

区别:字符串使用 " " 一次性赋值,末尾自动添0; 字符数组就是将字符型变量一个个地赋值给数组
char A[]="ABCD";                //长度为6
char B[]={'A','B','C','D'};     //长度为5

去余的几个特殊数值

0%2=0
1%2=1
2%2=0
3%2=1

常用格式化说明符

%d        

读入十进制整数

%u        

读入一个无符号十进制整数

%x        

读入十六进制整数

%o        

读入八进制整数

%i        

读入十进制,八进制,十六进制整数

%c        

读入一个字符

%s

读入一个字符串(其要求的参数是指针)

%f        

读入一个浮点数

%p

读入一个指针

%%

读%符号

NOTES:  

        1、格式化说明符可大写也可小写

         2、&中的&是地址运算符,分别获得这三个变量的内存地址

         3、printf只需要获得参数数值,scanf需要修改变量的能力。故scanf需要取址符&

         4、小数记得使用“%f”配合“float定义”来发送

         5、%f 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入

         6、51单片机与标准C有区别:

%d

Int

%bd

char

%u

unsigned int

float与double

float类型,单精度浮点数,可以存放8个字节

double类型,双精度,可以存放16个字节

区别:

        double精度高,精度16位(保留15位小数),float精度7位(保留6位小数)

        小数默认是double类型,用float时需要进行强转,或者在小数后加上f。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值