C语言总结Word格式文档下载.docx

上传人:b****5 文档编号:19190567 上传时间:2023-01-04 格式:DOCX 页数:28 大小:37.49KB
下载 相关 举报
C语言总结Word格式文档下载.docx_第1页
第1页 / 共28页
C语言总结Word格式文档下载.docx_第2页
第2页 / 共28页
C语言总结Word格式文档下载.docx_第3页
第3页 / 共28页
C语言总结Word格式文档下载.docx_第4页
第4页 / 共28页
C语言总结Word格式文档下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C语言总结Word格式文档下载.docx

《C语言总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言总结Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。

C语言总结Word格式文档下载.docx

若a>

b,则为真,值为1,所以c为1

5、逻辑运算

(1)逻辑与&

&

(2)逻辑或|

(3)逻辑非!

6、位运算

(1)按位与&

(2)按位或|

(3)按位异或^

(4)按位取反~

(5)位左移<

<

后面补零

(6)位右移>

>

7、自增运算

(1)++i先加1再使用--I先减1再使用

(2)i++先使用再加1i--先使用再减1

8、复合运算

变量复合赋值运算符表达式

a+=3等价于a=a+3<

=左移赋值

七、C语言结构语句

1.顺序结构0条语句

2.选择语句2条语句

(1)if单选if—else两选

(2)Switch—case—break,三者合起来才算选着语句

3.循环语句3条语句

(1)for(初值;

条件;

增值)

(2)do语句;

while(表达式)先执行后判断

(3)while(表达式)语句;

4.Break:

跳出循环语句,专用于switch语句和循环语句

Continue:

结束本次循环,专用于循环体中。

例:

ucharx=1,y=1;

for(i=0;

i<

2;

i++)

{x=x+1;

break;

y=y+1;

}循环结束后x=2,y=1,只执行一次程序

如果把break换成continue则x=3,y=1跳出本次循环执行下一次循环

5.Return子程序返回

八、函数

1.函数组成

(1)函数声明

(2)子函数

(3)函数的调用

2.如果函数有类型,那么一定有返回值

如果函数有形式参数,那么一定有实参向形参判定

九、数组、指针

1.数组类型数组名数组长度数组个数数组值

Inta[10]={0,1,2,3,4,5,6,7,8,9}后面5个数全赋值0

2.字符数组

Charc[]=“Cprogram”用字符串赋值比用字符逐个赋值要多占一个字节,用于存放”\0”标志

3.指针

uchar*spsp表示指向地址的数

*sp++表示指针是指向sp加1后的地址,但是数值时sp地址内的数值

4.P[i]与*(p+i)等价

十、跑马灯

1.延时1s函数

voiddelay1s()

{

uinti;

uintj;

for(i=1000;

i>

0;

i--)

for(j=110;

j>

j--)

}

2.数组方法实现

ucharcodeshu[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchari;

P1=0xff;

while

(1)

{

for(i=0;

8;

{

P1=shu[i];

delay(30000);

}}

3.指针

ucharcodeshu[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchart;

for(t=0;

t<

t++)

{

P1=*(shu+t);

delay();

}}

4.Switch—case—break语句

while

(1)//循环

{uchari;

{switch(i)

case0:

P1=0xfe;

break;

case1:

P1=0xfd;

case2:

P1=0xfb;

case3:

P1=0xf7;

case4:

P1=0xef;

case5:

P1=0xdf;

case6:

P1=0xbf;

default:

P1=0x7f;

//default可换成case7}

}

5.For语句

P1=0xff;

while

(1)

{for(i=0;

{a++;

if(a>

8)a=0;

b=(a-1);

P1=~(0x01<

b);

delay();

}}

6while语句

for(;

;

a=0)//无限循环

{a=0;

while(a<

8)

{P1=~(0x01<

a);

a++;

}}

十中断、定时器

1.定时查询4+1

(1)设置TMOD,定时器工作方式

(2)装预置数(THX,TLX)

(3)开定时器(TRX)

(4)TFX=0

查询溢出标志位TFX,若TFX由0到1,说明定时时间已到,硬件自动置1,软件清零

(5)记满重装预置数

2.中断

(3)设置IE,ITX,开总中断,开定时器中断

(4)设置TRX,开定时器

(5)中断时间到,处理中断服务函数

(6)记满重装预置数

3.中断函数语法

返回值函数名([参数])[模式][重入]interruptn[usingm]

外部中断0、定时器0、外部中断1、定时器1、串口、定时器2中断源编号为0、1、2、3、4、5

4.利用定时查询和中断方法实现跑马灯

(1)定时查询

voidled()

{unsignedchari;

20;

{

while(!

TF0);

TF0=0;

TH0=0x3c;

//重装预置数

TL0=0xb0;

}

voidmain()

{TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

TR0=1;

//开定时器中断

TF0=0;

//开定时器溢出中断

while

(1)

{unsignedchari;

for(i=0;

{P1=~(0x01<

i);

led();

}}}

(2)中断

voidtimer0(void)interrupt1//定时器0中断服务程序

TH0=0x3c;

TL0=0xb0;

i++;

 

voidmain()//主程序

TMOD=0x01;

//定时器0,方式1

//装预置数

EA=1;

ET0=1;

TR0=1;

P1=0xfe;

{

while(i!

=20);

P1=_crol_(P1,1);

//左移指令,_cror_右移指令

i=0;

}}}

十一串行通信

1.串口3+2

(1)设置传输格式

(2)设置波特率

(3)设置串口工作方式

(4)若R1由0到1,表示接收完毕,只要把数据从接收SBUF取出来就可以了

(5)只要将数据放入SBUF中,若TI由0到1,则发送完毕

2.例子程序

(1)串口中断

main()

delay(1000);

TMOD=0x20;

//设置波特率

TH1=0xfd;

//Baudrate=9600;

TL1=0xfd;

PCON=0x00;

SCON=0x50;

//串行通信设置

EA=1;

ES=1;

TR1=1;

P0=m[0];

P1=0xfe;

delay(200);

}

voidurat1(void)interrupt4

{if(RI)

{RI=0;

m[0]=SBUF;

}}

十二矩阵键盘

1、扫描键盘函数

P2=0xf0;

a=P2;

if(a!

=0xf0)

delayms(5);

P2=0xf0;

if(a!

key1=P2;

P2=0x0f;

key2=P2;

key=key2|key1;

gotopp1;

}elsekey=0xff;

2、松键处理

KEY=0xff;

//先将KEY赋值为无键按下

k=Keyscan();

//调用键盘扫描函数

if(k!

=0xff)//如果有键按下,则k不等于0xff

while(k==keyscan())//当键一直按着,则一直在循环这条语句,并不赋值,

P1=0xff;

//这个时候直接让他不显示

}

3、数值处理

{k=key();

//调用查询键值函数

if(k<

=0x0f)//如果k小于15,则往下执行

display[0]=k/10;

display[1]=k%10;

//分离将个位和十位分开

for(i=0;

P1=(~(0x01<

i));

//依次选中第一个和第二个数码管

P0=shu[display[i]];

//依次给个位和十位赋值

delay(100);

十三字符液晶屏

1.初始化

(1)显示模式设置0x38

(2)关显示

(3)清屏

(4)显示开关及光标设置

(5)显示状态(动态0x07,静态0x6)

voidinitlcd()

sendcommandbyte(0x38);

//设置工作方式,不检测判忙信号

sendcommandbyte(0x01);

//清屏

sendcommandbyte(0x0c);

//显示状态设置,开显示

sendcommandbyte(0x06);

//输入方式设置,不滚屏,0x07滚屏

2、写指令

3.写数据

voidsenddatabyte(ucharch)

RS=1;

RW=0;

P0=ch;

E=0;

delay

(1);

E=1;

delay(1000);

voidsendcommandbyte(ucharch)

RS=0;

//延时40us

如果在E=1后面延时之后再将E置0,则在初始化程序中只写一次0x38

4、指针

voiddisplay(uchar*p)

ucharcount;

//局部变量定义

sendcommandbyte(0xc0);

for(count=0;

count<

16;

count++)

senddatabyte(*p++);

main()

charcodemsg[16]="

liuhankan"

initlcd();

{display1(msg1);

十四电子表

1.只有第一个键按下其他按键才有效

case3:

if(TR0==1)

break;

shi++;

if(shi==24)

shi=0;

case4:

miao=0;

}

k=keyscan();

if(k!

=0xff)

switch(k)

case1:

TR0=!

TR0;

case2:

fen++;

if(fen==60)

fen=0;

2中断函数处理

voidtime0(void)interrupt1using1

//重装初值50ms

msecond++;

if(msecond==20)

msecond=0;

miao++;

//秒个位加1

if(miao==60)

{miao=0;

fen++;

if(fen==60)

{fen=0;

shi++;

if(shi==24)

{shi=0;

}}}}}

3、键盘扫描函数

if(!

k2)

{

delay(10);

if(!

{while(!

k2)display();

a=2;

gotopp1;

}

ucharkeyscan(void)

uchara,key;

P2=0xfe;

//让第一行为低电平

if(!

k1)//第一个按键按下

//延时去抖

k1)

{

while(!

k1)display();

a=1;

gotopp1;

}

{uchara,key;

十五点阵液晶屏

1.硬件设计要点

(1)芯片概述,管脚图,真值表

(2)功能

(3)典型电路

2.软件设计:

(1)概述,特点

(2)指令说明和时序

(3)典型子程序和程序流程

3.12864可以显示汉字4排,每排8个汉字,一个汉字=16行*16列=2页*16列,8行为一列,1个ASCII字符=16行*8列=2页*8列

4.管脚

R/W=0,硬件已经接地

CS1=1选中右半屏CS2=1选中左半屏

5.步骤

(1)初始化

(2)清内存

(3)显示

6.定义寄存器命令存储器

#defineDisp_On0x3f//定义显示开关开

#defineDisp_Off0x3e//定义显示开关关

#defineCol_Add0x40//设置Y的起始地址

#definePage_Add0xb8//设置起始页地址

#defineStart_Line0xc0//从哪一行开始

显示:

0011111(1/0)为0表示关,1表示开

显示起始行:

11(0…63)

设置X地址,页地址:

10111(0^7)

设置Y地址列:

01(0^63)

7.写命令

/*------------------写命令到LCD-----------------------------*/

voidwrite_com(unsignedcharcmdcode)

//RW=0

Lcd_Bus=cmdcode;

delay

(2);

8.写数据

/*------------------写数据到LCD-----------------------------*/

voidwrite_data(unsignedcharDispdata)

//RW=0;

Lcd_Bus=Dispdata;

9.清内存

/*------------------清除内存-----------------------------*/

voidClr_Src()

ucharj,k;

CS1=1;

CS2=1;

write_com(Page_Add+0);

write_com(Col_Add+0);

for(k=0;

k<

k++)

{

write_com(Page_Add+k);

for(j=0;

j<

64;

j++)

write_data(0x00);

10.指定位置显示汉字

/*-------------------指定位置显示汉字16*16-----------------------*/

voidhz(ucharpag,ucharcol,uintss)//pag代表第几页;

col代表第几列,ss代表显示那个字。

ucharj=0,i=0;

ss=ss*32;

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

write_data(HZ_Store[16*j+i+ss]);

11.文字从上往下移动

for(i=64;

CS1=1;

CS2=0;

//左屏

hz(0,0,0);

//中

hz(2,0,4);

//电

hz(0,16,1);

//华

hz(2,16,5);

//话

hz(0,32,2);

//人

hz(0,48,3);

//民

//hz(0,48,3);

//hz(0,48,3);

hz1(2,32,10);

//写“:

hz1(2,40,1);

//1

hz1(2,48,5);

//5

hz1(2,56,1);

//1

write_com(Disp_Off);

write_com(Page_Add+0);

write_com(Col_Add+0);

write_com(Start_Line+i);

//改变初始状态的行值,每来一次就改变一次

write_com(Disp_On);

12.初始化液晶屏

/*------------------初始化LCD屏--------------------------*/

voidinit_lcd()

delay(100);

write_com(Disp_Off);

write_com(Start_Line+0);

write_com(Disp_On);

十六I2C总线

1、I2C:

由数据线SDA和时钟总线SCL两条线构成的通信线路,既可以接收数据,也可以发送数据。

2、单片机向I2C写数据单片机读I2C数据

(1)开始

(1)开始

(2)写芯片地址

(2)写芯片地址

(3)应答(3)应答

(4)写芯片内部地址(4)写芯片内部地址

(5)应答(5)应答

(6)写数据(6)把写转换成读

(7)应答开始

(8)结束读芯片地址

应答

(7)读数据

(8)结束

3.I2C协议

(1)只有在总线空闲时才允许启动数据传送(两条线为高电平)

(2)在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,数据线的任何跳变都会被看作起始信号或停止信号

4.启动信号

SCL为高电平期间,SDA出现下降则为启动信号

/**********启动信号*************/

VoidStart()

{SDA=1;

delay();

SCL=1;

delay();

SDA=0;

5.寻址信号

芯片寻址:

AT24C02地址控制字1010A2A1A0R/W(R/W为0写,1读)

片内寻址

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1