单片机C语言应用学习指南_第1页
单片机C语言应用学习指南_第2页
单片机C语言应用学习指南_第3页
单片机C语言应用学习指南_第4页
单片机C语言应用学习指南_第5页
已阅读5页,还剩72页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机C语言应用

学习指南

目.录

项目1开始学习单片机........................................................1

项目2炫彩流水灯...........................................................3

2.1发光LED灯...........................................................3

2.2闪烁LED灯...........................................................6

2.3模拟广告流水灯.......................................................9

2.4炫彩流水灯...........................................................12

项目3球赛记分器...........................................................14

3.1音频报警器...........................................................14

3.2实用键控LED灯......................................................17

3.3静态显示数码管显示器................................................20

3.4动态显示数码管显示器................................................25

3.5球赛记分器的制作与调试..............................................27

项目4红外线计数器........................................................30

项目5定时控制电源插座....................................................37

5.1数字钟...............................................................37

5.2定时控制电源插座....................................................41

项目6PC遥控小车.........................................................49

项目7液晶显示日历........................................................54

7.1DS18B20数字温度采集................................................54

7.2LCD1602液晶显示器.................................................59

7.3DS1302时钟芯片.....................................................63

7.4液晶显示日历.......................................................67

项目8单片机综合项目研制..................................................69

项目1开始学习单片机

任务描述

-学会使用单片机实验学习开发系统,驱动发光二极管发光。

要求:

1、按照如图所示硬伶电路,在单片机最小系统基础上焊接制作发光二极管电路.

2、按要求输入程序并编译生成目标文件,下载到单片机使PLO所接发光二极管亮。

目标:

1、学会使用KeilC5I编写第一个C语言源程序,并编译生成目标文件。

2、学会使用AVREghtcr卜.载软件将目标文件下载到单片机中。

3、学会使用程序控制单片机引脚的高、低电平。

4、通过观察程序执行的结果,理解控制单片机引脚输出高、低电平对外围电路所起

到的作用。

电路制作

一、单片机驱动发光二极管发光硬件电路原理图

MCS51

P1.7

P3.0

单片机控制LED灯

二、元器件清单如下,请补充各元件功能

三、工具与仪表:

四、电路制作

理解原理图,识别各元件,熟悉封装,并根据图纸装配元件,完成电路的焊接。

相关资讯

一、任务分析:

发光二极管具有单向导电性。

单片机的P1.0接到发光二极管D1的阴极,发光二极管D1的阳极通过排阻接上电源。

当单片机的P1.0输出低电平,发光二极管的阳极电位高于阴极电位,就会导通发亮;否则,

当单片机的P1.0输出高电平,发光二极管就会截止,不亮。

当发光二极管导通时,发光二极管的管压降为L8〜2.2V咨询,流过二极管的电流I

5-2

=3〜IOmA,所以限流电阻—=3OOQo

10

由于单片机P1口的8个引脚可以同时输出不同的电平,所以可以控制不同的发光二极管

D1〜D8同时亮灭。

编程调试

1

一、经过分析,程序对应的流程图和参考程序

(初始化・,>#include<reg51.h>〃包含库函数文件

sbitLEDO=PIA();〃指定位地址

voidmain()〃主程序

LEDC'=0;

while(l);〃原地循环

原地循环

二、编程调试

1、使用KeiluVersion3软件编写程序。

(1)运行KeiluVersion3,在c:\mydocumenl新建项目sludy.uv2

选择Atmel公司的89S51芯片,点击“否”取消加入库文件Starlup.a51,

(2)新建C源程序文件proglT.c,并保存到c:\mydocument下面,将该C源文件加

入项目。

(3)编辑文件,输入程序,并保存。

(4)通过单击.四四,卷(一“Output”选项,选中“CreateHEXFile”选项,

使程序编译后产生HEX代码

(5)单击学茴小4编译全部文件,生成*.hex文件,study,hexo

(6)我们还可以通过单击画进入软件调试状态,使用复位、全速运行、停止、单

步运行等工具进行软件调试,如图髓|其❷料中:*}|。

2、使用下载软件将程序编译生成的HEX文件下载到51单片机

3、观察程序运行的效果,第一个发光二极管亮了吗?

2

项目2炫彩流水灯

2.1发光LED灯

任务描述

使用单片机驱动发光二极管发光。

要求:

1、按照如图所示硬件电路,在单片机最小系统基础上焊接制作发光二极管电路。

2、按要求输入程序并编译生成目标文件,下载到单片机使P1.0所接发光二极管亮。

目标:

1、学会使用KeilC5I编写第一个C语言源程序,并编译生成目标文件。

2、学会使用AVRfighter下载软件将目标文件下载到单片机中。

3、学会使用程序控制单片机引脚的高、低电平。

4、通过观察程序执行的结果,理解控制单片机引脚输出高、低电平对外围电路所起

到的作用。

电路制作

一、单片机驱动发光二极管发光硬件电路原理图

图1.2

二、元器件清单如下,请补充各元件功能

元器件

序号名称型号及参数功能

代号

1IC1单片机AT89S51

2XTAL晶振11.0592M

3C1I,C12瓷片电容33pF

4CIO电解电容10uF

5RI9电阻10k

6R20电阻200

7D1〜D8发光二极管①3

3

8RP1排阻A471J

三、工具与仪表:

电烙铁、斜口钳、指针万用表、数字万用表等。

四、电路制作

理解原理图,识别各元件,熟悉封装,并根据图纸装配元件,完成电路的焊接。

相关资讯

二、相关知识介绍

1、库函数文件reg5Lh可以帮助我们使用C51芯片内部资源。

2、我们可以通过sbit定义位变量,表示单片机的一个位地址或者一个二进制的位变

量,其值只能是0或者1,变量的标识符命名时可以使用字母、数字和下划线,对大小写

的书写严格区分,不能与关键词同名,例如不能使用sbilPlAgPl.O。

3、C程序由函数构成,其中main()为程序的主函数,是每个程序执行的起始点。

4、C语言程序的书写格式:一行可以写几个语句,一个语句也可以写在多行上;每

条语句的最后必须有一个分号表示语句的结束。

5、使用注释可以提高程序可读性,是编程人员的良好习惯。例如使用/**/进行多行注

释,或者使用〃对当前行注释。

6、在程序的书写中,我们多用TAB键将每一部分的语句对齐,使编写的程序呈现锯

齿形,这样可以帮助我们分清不同的程序体,便于调试.

7、while(l);为一个死循环,可以理解为程序将在此处进入空闲和等待状态。

编程调试

一、经过分析,程序对应的流程图和参考程序

#inchide<reg51.h>〃包含库函数文件

SbitLEDO=P1N);〃指定位地址

voidmain()〃主程序

(

LED0=0;

while;1);〃原地循环

二、编程调试

1、使用KeiluVersion3软件编写程序。

2、下载程序到单片机

3、观察程序运行的效果

4、如果第一次不成功,试通过调试解决问题。

4

拓展训练

1、编写程序使单片机Pl.2所接发光二极管D3亮。

提示:要使P1.2所接发光二极管亮,则P1.2输出—电平?其他引脚输出—电平?

编写程序:

完成情况(打V表示):()

2、编写程序使单片机PI所接所有发光二极管都亮,

提示:要使P1所接发光二极管亮,则P1全都输出—电平,如果要一次性赋值,用

C语言程序如何实现:?

完成情况:()

3、编写程序使单片机P1所接发光二极管DI,D3,D5,D7一起亮。

提示:要使P1所接发光二极管D1D3D5D7同时亮,则输出低电平,

P1的状态用二进制表示为:,用C语言程序如何实现:?

完成情况:()

5

2.2闪烁LED灯

任务描述

~~使用单片机驱动发光二极管闪烁。

要求:

1、按要求输入程序尹编译生成目标文件,下载到单片机使PI.0所接发光二极管DI

闪烁发光,每一秒闪烁一次。

2、完成拓展训练任务,使P1口指定发光二极管闪烁发光,并通过修改程序,提高或

者降低发光二极管闪烁速度。

目标:

1、熟练使用KeilC5I编写C语言源程序,并编译生成目标文件,学会使用KeilC51

调试程序。

2、熟练掌握AVRfighter下载软件的使用及使用其自动更新功能提高效率。

3、学会编写程序实现延时和进行延时长短控制。

电路制作

一、单片机驱动发光二极管闪烁硬件电路原理图(同1.1)

二、元器件清单

(略,同1.2)

三、工具与仪表:

电烙铁、斜口钳、指针万用表、数字万用表、示波器等。

四、电路制作

(略)

相关资讯

一、任务分析:

单片机的指令的执行的时间是很短,数量一般都是us级。当我们要求发光二极管每

一秒闪烁1次,也就是发光二极管亮0.5s,灭0.5s,不断循环。

实际操作中我们一般采取软件延时的办法。通过程序使发光二极管亮,然后延时0.5s;再

是发光二极管灭,再延时0.5s,然后不断循环这个过程。

二、相关知识介绍

1、使用字符P1可以直接调用单片机特殊功能寄存器(SFR)的PI端口物理地址,

从而操作P1端口,对其赋值,就可以控制其每一个引脚输出的电平高低。

2、KeilC51程序是由函数构成,任何函数必须先定义,再使用。

3、我们可以使用unsignedint*定义一个无符号整型变量,表示一个I6bi【的二进制

数,其数值范围为。〜65535,其命名遵循标识符命名原则。

同理,使用unsignedchar定义一个无符号字符型变量,表示一个8bit的二进制数,

其数值范围为0~255。

变量如果定义在函数的外面,成为全局变量;变量如果定义在函数体内,则只能在函

数内部使用。

4、while(表达式){循环体},表示当表达式的值为真(非0)时,就执行循环体,表达

式为真就一直执行循环体,其特点是先判断,再确定是否执行。

6

while(l){),表示程序将循环执行{}中的语句体。

类似的语句体还有do{循环体}while(表达式),其特点是先执行循环体,再判断表达式

是否为真,以确定是否继续执行循环体。

5、for(表达式A;表达式B;表达式C)(循环体),该语句的执行过程为:

(1)求解表达式A;(2)判断表达式B,其值为假时退出该语句;其值为真时执行

循环体,然后继续执行第(3)步。(3)求解表达式C;(4)返回第(2)步

6、延时程序可以用一个子函数来表示,可以是一个固定延时时间的函数,例如delay

();或者是一个通过参数控制延时时间的函数,例如dclay(unsigncdintm)

通常单片机使用的石英品振振荡频率为12MHz,其对应的机器周期为lus,通过分析

和验证,unsignedintn=0;for(n=0;n〈124;n++);语句将会执行约1ms。

{语句};这条语句将把{}内的语句循环执行m次。

编程调试

一、经过分析,程序对应的流程图和参考程序

#include<reg5l.h>

sbitLED0=PIA0;

voiddclayfunsigncdintt)

(

unsignedinti.j;

for(i=0;i<t;i++)〃延时l个1ms

for(j=0;j<l12J++);〃延时约1ms

voidmain()

(

while⑴

(

LED0=0;//DI亮

delay(500);〃延时0.5s

LEDO=1;//DI灭

delay(5OO);〃延时0.5s

二、编程调试

1、使用KeiluVersion3软件编写程序。

2、使用AVRfighter软件下载程序到单片机AT89S51

3、观察程序运行的效果,第一个发光二极管闪烁了吗?()

如果发光二极管正常闪烁,测试:

发光二极管阳极和阴极之间的电压Ud=

流过发光二极管的电流Id=

这个结果和1.2测得的结果一致吗,为什么?

7

4、如果第一次不成功,试通过调试解决问题。

调试成功后,分析故障的原因是:

拓展训练

1、编写程序使P1口所接所有发光二极管每1秒闪烁2次。

提示:要实现要求,则P1所接发光二极管每秒就要闪烁一次,即亮灭

一次。则P1输出低电平秒,再输出高电平秒,如此循环。这

时候,P1输出的是一个波形,其频率是Hzo

完成情况:()

2、编写程序使P1口所接所有发光二极管1357和2468,交替闪烁,每1秒闪烁4次。

提示:要实现要求,则发光二极管DID3D5D7同时亮,亮秒,然后发

光二极管D2D4D6D8同时亮,亮秒。

编写程序:

完成情况:()

3、编写程序使P1口所接所有发光二极管D1每1秒闪烁1次,同时D2每1秒闪烁2

次。

提示:根据要求画出D1和D2对应的PI口引脚输出的波形图,再转化为程序。

完成情况:()

4、使用本任务案例程序,PL0输出1Hz的方波,其周期应该是秒,我们用示

波器观测实际波形,结果得到的实际周期是秒,通过调节程序中延时1ms语句中

的n值,即语句(for(n=0;n<124;n++);),使P1.0输出相对更为精确的的z方波,这时候n

的溢出值由124变为,这是为什么?

完成情况:()

5、编写程序使P1口所接所有发光二极管一个一个轮流亮,每I秒亮一遍。

提示:要实现功能,每一个发光二极管要亮秒,如此循环。

完成情况:()

8

2.3模拟广告流水灯

任务描述

使用单片机驱动8个发光二极管模拟广告流水灯效果。

要求:

1、编写程序使P1口的发光二极管实现单灯流水显示,每一个灯亮200ms。

2、完成拓展训练任务,使P1口发光二极管实现其池广告灯效果。

目标:

1、使用循环移位函数实现流水灯效果。

2、使用数组和查表方式实现各种广告彩灯效果。

电路制作

一、单片机驱动8个发光二极管模拟广告流水灯硬件电路原理图(同1.1)

二、元器件清单

(略,同1.2)

三、工具与仪表:

电烙铁、斜口钳、指针万用表、数字万用表、示波器等。

四、电路制作

(略)

相关资讯

一、任务分析:

要使P1口的发光二极管实现单灯流水显示,可以采用P1口送Oxfc先亮第一个灯,延

时200ms后,将P1口值循环左移1位再送P1口,使第2个灯亮,再延时200ms,依次类

推,循环下去。

或者把每一种亮灯模式对应的PI口值存到一个表格中,每次都调用一个值送P1口并延时,

一直到表格结束再重新开始循环,这种方法适用性更广,能实现各种不同的彩灯效果,在实

际工程中应用较多。

二、相关知识介绍

1、KeilC51提供了丰富的库函数,供我们调用和使用。

专用寄存器reg51.h,包括了所有8()51的SFR及其位定义,我们一般都必须在文件开

头使用#inckidevreg5l.h>包含该头文件。

math.h,数学运算头文件。

stdio.h,输入输出流函数头文件。

2、循环移位函数

在头文件intrins.h中有循环移位函数,_crol_(a,b)表示将一个无符号字符型变量a循环

左移b次,_cror_(a,b)表示将一个无符号字符型变量a循环右移b次,另外还有无符号的整

型变量循环移位函数。

3、数组一种具有固定数FI和相同类型成分的的有序集合,常用来表示一些固定表格、

数据等。unsignedchartable[8J={0xfe,0xfd,()xfb,0xf7,()xef,0xdf,0xbf,0x7f},表示一个无

符号整数型数组,一共有8个元素,分别用table[0],table⑴,……table⑺来表示,我们可

以使用tabled来使用这个数组里的数,其中i=0〜7。

9

4、KeilC自带有一个位左移和位右移运算符(<<和>>),其功能是将一个数的二进制

代码全部同时左移或者右移若干位,移出的数据丢失,空白的地方补“0”。

位左移运算格式为a«n,表示把a的值左移n位,高位丢失n位,低位自动补上n个0:例

如Pl=(Pl«2);表示把PI的值左移2位,右边补上2个“0”,然后再赋给P1,如果P1

原来的值为0x5c=01011100B,左移2位后P1=01110000B=0x70。

编程调试

一、经过分析,程序对应的流程图和参考程序

〃使用循环移位函数实现单灯流水效果

(开始)

P1左移1位显示

延时0.2s

〃使用数组和查表方式实现各种广告彩灯效果〃使用循环移位函数实现单灯流水效果

#inckide<reg51.h>#inckide<reg51.h>

unsignedcharcode#include〈intrins.h>〃包含_crol_函数所在

table[l={0xfe,0xfd.0xfb,0xf7,0xef.0xdf,0xbf,0x7f};的头文件

voiddclay(unsigncdintt)voiddclay(unsigncdintt)

{{

unsignedinti.j;unsignedinti,j;

for(i=0;i<t;i++)〃延时1个【msfor(i=0;i<t;i++)〃延时t个

for(j=0:j<112;j++);//延时约1ms1ms

)for(j=0;j<112;j++);〃延时约1ms

voidmain()I

{voidmain。

unsignedchari;〃定义无符号整型变量{

while(l)unsignedchari=0xfe;〃定义变量

(while(l)

for(i=0;i<8;i++)

i=crol(i,l);//i循环左移

10

Pl=table[i];Pl=i;//Pl显示

delay(200);delay(200);

)}

})

I

二、编程调试

1、使用KeiluVersion3软件编写程序。

2、使用AVRfighter软件下载程序到单片机AT89S5I

3、观察程序运行的效果.

使用循环移位函数实现单灯流水效果?()

使用数组和查表方式实现各种广告彩灯效果?()

4、如果第一次不成功,试通过调试解决问题。

调试成功后,分析故障的原因是:

拓展训练

1、编写程序使P1口所接所有发光二极管实现两个相邻的发光二极管双灯流水,每次

亮0.5so

分析:

编写程序:

完成情况:()

2、用KeilC自带々位左移和位右移运算符(<<和>>)能否实现单灯流水效果。

分析:

完成情况:()

3、编写程序使8个发光管演示出开幕式、闭幕式效果。

分析:

完成情况:()

4、编写程序使8个发光二极管演示单灯流水效果,同时其速度是变化的,逐渐加快,

或者逐渐渐慢。

提示:如果每次调用延时程序的参数是变化的,其延时时间不同,就会出现速度变化

的效果。

完成情况:()

II

2.4炫彩流水灯

任务描述

制作心形流水灯硬件实物,并编写程序驱动流水灯呈现绚丽漂亮的效果。

电路制作

一、电路原理图

RI8

RI9

-----------

R20

-4----------3-----------1gB

R2I

-----------

R22

二、,

■<----------1-----------

H---------->―

K24

Y)-----------

R25

4)——

R27

-4----------»-----------

R28

:11^

----------»-----------

R29

:!

-----------

>i*

KM

.;11,

R52

二、元器件清单(略)

三、工具与仪表(略

四、电路制作

相关资讯

单片机有4个8bit的10口,每个10驱动1个LED灯,可以驱动32个LED灯,将LED

布局为1个心形,并通过控制4个IO口输出高低电平来实现不同的效果。

编程调试

一、经过分析,程序对应的流程图和参考程序

参考流程图程序自编

12

C开始)

闪烁流水灯1

1

奇偶流水灯2

1

左移流水灯3

5干闭幕j流水灯,1

...

:------------

二、编程调试

拓展训练

1、在有流水灯的情况下,加入声控。

2、在有流水灯的情况下,或者音乐播放。

13

项目3球赛记分器

3.1音频报警器

任务描述

~~使用单片机驱动蜂鸣器或者音频放大电路发出报警声。

要求:

1、单片机P1.1驱动芍源蜂鸣器发出报警声。

2、单片机P1.1输出IKHz方波作为报警信号驱动无源蜂鸣器或者音频放大电路发出

报警声,并用示波器精确调整频率。

目标:

1、学会使用单片机控制有源蜂鸣器发声。

2、学会使用单片机的延时程序输出指定频率的音频信号。

3、学会装配LM386功率放大电路及调试。

电路制作

一、单片机驱动蜂鸣器发声硬件电路原理图

二、元器件清单

元器件

序号名称型号及参数功能

代号

1SPEAKER有源/无源蜂鸣器

2Q9三极管PNP8550

3R30电阻5.1k

4J4跳线sip3

(注:单片机最小系统元件略)

三、工具与仪表:

电烙铁、斜口钳、指针万用表、数字万用表、示波器等。

四、电路制作

理解原理图,识别各元件,熟悉封装,并根据图纸装配元件,完成电路的焊接。

相关资讯

一、任务分析:

如果是驱动有源蜂鸣器发声,单片机只要输出低电平,Q9就会饱和导通,蜂鸣器流

14

过直流电流就会发出固定频率的声音。

如果是驱动无源蜂鸣器,则单片机必须输出固定频率的方波信号。要得到1kHz的方

波,则其周期为1ms,单片机控制引脚输出高电平和低电平各0.5ms。

二、相关知识介绍

1、蜂鸣器是一种一体化结构的电子发声器件,采用直流电压供电,分为有源和无源

两种。有源蜂鸣器直接通以额定直流电压就可连续发声,内部发声频率固定;而无源蜂鸣

器则和电磁扬声器一样,需要提供一个固定频率的方波功率驱动它发出固定频率的声音。

编程调试

一、经过分析,程序对应的流程图和参考程序

P1.1输出IKHz方波驱动无源蜂鸣器发

〃P1.1输出IKHz方波作为报警信号驱动无源蜂

鸣器发出报警声音

#include<reg51.h>

sbitbeep=P1A1;

voidmain()

{unsignedcharn;

whilc(l)

{for(n=0;n〈150;n++);〃延时0.5ms

beep二〜beep;

二、编程调试

1、编程驱动有源蜂呜器发声1S。

2、编程使P1.1输出IKHz方波作为报警信号驱动无源蜂鸣器发出报警声音。使用示

波器进行精确调整。

拓展训练

1、单片机引脚输出指定频率音频信号,通过功放电路驱动扬声器发声,编写程序用

//IKHz方波0.1S报警子程序

sbitheep=PIA1;

voidheeplOOmsiO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论