单片机c语言编程时会用到哪些常用的C语

Python033

单片机c语言编程时会用到哪些常用的C语,第1张

关键字

用 途

说 明

auto

存储种类说明

用以说明局部变量,缺省值为此

break

程序语句

退出最内层循环

case

程序语句

Switch语句中的选择项

char

数据类型说明

单字节整型数或字符型数据

const

存储类型说明

在程序执行过程中不可更改的常量值

continue

程序语句

转向下一次循环

default

程序语句

Switch语句中的失败选择项

do

程序语句

构成do..while循环结构

double

数据类型说明

双精度浮点数

else

程序语句

构成if..else选择结构

enum

数据类型说明

枚举

extern

存储种类说明

在其他程序模块中说明了的全局变量

flost

数据类型说明

单精度浮点数

for

程序语句

构成for循环结构

goto

程序语句

构成goto转移结构

if

程序语句

构成if..else选择结构

int

数据类型说明

基本整型数

long

数据类型说明

长整型数

register

存储种类说明

使用CPU内部寄存的变量

return

程序语句

函数返回

short

数据类型说明

短整型数

signed

数据类型说明

有符号数,二进制数据的最高位为符号位

sizeof

运算符

计算表达式或数据类型的字节数

static

存储种类说明

静态变量

struct

数据类型说明

结构类型数据

swicth

程序语句

构成switch选择结构

typedef

数据类型说明

重新进行数据类型定义

union

数据类型说明

联合类型数据

unsigned

数据类型说明

无符号数数据

void

数据类型说明

无类型数据

volatile

数据类型说明

该变量在程序执行中可被隐含地改变

while

程序语句

构成while和do..while循环结构

附表1-1 ANSIC标准关键字

关键字

用 途

说 明

bit

位标量声明

声明一个位标量或位类型的函数

sbit

位标量声明

声明一个可位寻址变量

Sfr

特殊功能寄存器声明

声明一个特殊功能寄存器

Sfr16

特殊功能寄存器声明

声明一个16位的特殊功能寄存器

data

存储器类型说明

直接寻址的内部数据存储器

bdata

存储器类型说明

可位寻址的内部数据存储器

idata

存储器类型说明

间接寻址的内部数据存储器

pdata

存储器类型说明

分页寻址的外部数据存储器

xdata

存储器类型说明

外部数据存储器

code

存储器类型说明

程序存储器

interrupt

中断函数说明

定义一个中断函数

reentrant

再入函数说明

定义一个再入函数

using

寄存器组定义

定义芯片的工作寄存器

附表1-2 C51编译器的扩展关键字

附录二 AT89C51特殊功能寄存器列表(适用于同一架构的芯片)

符 号

地 址

注 释

*ACC

E0H

累加器

*B

F0H

乘法寄存器

*PSW

D0H

程序状态字

SP

81H

堆栈指针

DPL

82H

数据存储器指针低8位

DPH

83H

数据存储器指针高8位

*IE

A8H

中断允许控制器

*IP

D8H

中断优先控制器

*P0

80H

端口0

*P1

90H

端口1

*P2

A0H

端口2

*P3

B0H

端口3

PCON

87H

电源控制及波特率选择

*SCON

98H

串行口控制器

SBUF

99H

串行数据缓冲器

*TCON

88H

定时器控制

TMOD

89H

定时器方式选择

TL0

8AH

定时器0低8位

TL1

8BH

定时器1低8位

TH0

8CH

定时器0低8位

TH1

8DH

定时器1高8位

带*号的特殊功能寄存器都是可以位寻址的寄存器

也不知道你具体想要知道哪些C语言语句,下面有些基本知识的。。。希望对你有用,如还有疑问,记得回复下。。。

1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。

2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。

3. ++var表示对变量var先增一;var—表示对变量后减一。

4. x |= 0x0f表示为 x = x | 0x0f

5. TMOD = ( TMOD &0xf0 ) | 0x05表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。

6. While( 1 )表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{}

在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

代码

1. #include <AT89x52.h>//该头文档中有单片机内部资源的符号化定义,其中包含P1.3

2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口

3. {

4. P1_3 = 1 //给P1_3赋值1,引脚P1.3就能输出高电平VCC

5. While( 1 ) //死循环,相当 LOOP: goto LOOP

6. }

注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。

在某引脚输出低电平的编程方法:(比如P2.7引脚)

代码

1. #include <AT89x52.h>//该头文档中有单片机内部资源的符号化定义,其中包含P2.7

2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口

3. {

4. P2_7 = 0 //给P2_7赋值0,引脚P2.7就能输出低电平GND

5. While( 1 ) //死循环,相当 LOOP: goto LOOP

6. }

在某引脚输出方波编程方法:(比如P3.1引脚)

代码

1. #include <AT89x52.h>//该头文档中有单片机内部资源的符号化定义,其中包含P3.1

2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口

3. {

4. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句

5. {

6. P3_1 = 1 //给P3_1赋值1,引脚P3.1就能输出高电平VCC

7. P3_1 = 0 //给P3_1赋值0,引脚P3.1就能输出低电平GND

8. }//由于一直为真,所以不断输出高、低、高、低……,从而形成方波

9. }

将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )

代码

1. #include <AT89x52.h>//该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1

2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口

3. {

4. P1_1 = 1 //初始化。P1.1作为输入,必须输出高电平

5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句

6. {

7. if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC

8. { P0_4 = 0 } //给P0_4赋值0,引脚P0.4就能输出低电平GND

9. else //否则P1.1输入为低电平GND

10. //{ P0_4 = 0 } //给P0_4赋值0,引脚P0.4就能输出低电平GND

11. { P0_4 = 1 } //给P0_4赋值1,引脚P0.4就能输出高电平VCC

12. }//由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平

13. }

将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )

代码

1. #include <AT89x52.h>//该头文档中有单片机内部资源的符号化定义,其中包含P2和P3

2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口

3. {

4. P3 = 0xff //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平

5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句

6. {//取反的方法是异或1,而不取反的方法则是异或0

7. P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出

8. }//由于一直为真,所以不断将P3取反输出到P2

9. }

注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。

第一节:单数码管按键显示

单片机最小系统的硬件原理接线图:

1. 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF

2. 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF

3. 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理

4. 接配置:EA(PIN31)。说明原因。

发光二极的控制:单片机I/O输出

将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。

开关双键的输入:输入先输出高

一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。

代码

1. #include <at89x52.h>

2. #define LED P1^1 //用符号LED代替P1_1

3. #define KEY_ON P1^6 //用符号KEY_ON代替P1_6

4. #define KEY_OFF P1^7 //用符号KEY_OFF代替P1_7

5. void main( void )//单片机复位后的执行入口,void表示空,无输入参数,无返回值

6. {

7. KEY_ON = 1 //作为输入,首先输出高,接下KEY_ON,P1.6则接地为0,否则输入为1

8. KEY_OFF = 1 //作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为1

9. While( 1 ) //永远为真,所以永远循环执行如下括号内所有语句

10. {

11. if( KEY_ON==0 ) LED=1//是KEY_ON接下,所示P1.1输出高,LED亮

12. if( KEY_OFF==0 ) LED=0//是KEY_OFF接下,所示P1.1输出低,LED灭

13. } //松开键后,都不给LED赋值,所以LED保持最后按键状态。

14. //同时按下时,LED不断亮灭,各占一半时间,交替频率很快,由于人眼惯性,看上去为半亮态

15. }

数码管的接法和驱动原理

一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。

我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。

如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。

以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据

C语言基础语句

C程序的语句

1.表达式语句

2.函数调用语句

3.控制语句

条件判断

4.复合语句

5.空语句