0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用c语言编写单片机流水灯程序详解

电子设计 来源:互联网 作者:佚名 2017-12-05 10:35 次阅读

C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒。是利用单片机I/O口控制外部设备的简单例子。当然,在你掌握了本程序后,完全可以充分发挥你的想象,改变一下程序内容和灯的接法(比如用光耦驱动继电器来控制霓虹灯),做出各种变化非凡的大型灯光广告牌。

一、硬件电路

因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。

1512218838879601.jpg  

1512218839541578.jpg

电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器。值得注意的是,C2、C3的容量不能与图中数值偏差太大,否则可能引起不起振或振荡不稳定。XTAL的频率可以在4-20MHz之间,不过,频率的变化会导致程序运行速度的变化,这样就需要调整延时子函数的参数。事实上,不调整参数亦可,只是此时延迟时间不再是1秒,其延迟时间会随着XTAL频率的降低而增加。

二、软件部分

本程序包含两个函数,一个是主函数,另一个是延时子函数。源程序如下(为了便于讲解,我们为每行程序加上了编号):

程序各行作用如下:

00行:把AT89C2051的头文件“AT89x051.H”包含进来。

01行:声明Delay()延时子函数,该函数有一个无符号整型参数k,同时函数前面的void表明函数不返回函数值。

02行:延时子函数的开始,同时声明两个无符号整型变量i和j。

不过请注意,这里没有象上期的程序一样,把表示函数开始的“{”单独成行,而是把下一行写在一起了。事实上,写C程序的时候,可以把多行写作一行,C编译器只要遇到分号就认为是一行语句的结束。

当然,我们不能因为C程序有这个特点,就随意把多行合作一行书写,实际书写C程序的时候,还是要养成良好的程序书写习惯,按照约定俗成的原则来书写。

03行:声明for()循环。这个循环的初始条件是i=0,终止条件是i<k,循环计数是每循环一次,用手计数的变量i加1。因此,这个循环的循环次数就是k次。这样,只要改变k的值(即改变Delay()延时子函数的参数k的值),就可以很容易地控制循环次数,从而获得不同的延时时间。

04行:声明嵌套在03循环中的一个新的for()循环,这个循环与上一个循环相似,其循环次数是120次。本循环与上一个循环嵌套后,使得总的循环次数达120×k次。

05行:第一个分号,表示L条空语句,占用一个机器时间,以实现延时的目的。后面的两个“}”中,第一个“}”是04行for()循环的结束标志,程序遇到它时,将自动返回04行,使用于循环计数的变量j加1,同时判断j是否小于120,如果否,则转入05行;第二个是03行for()循环的结束标志,程序遇到它则会返回03行。

06行:Delay()延时子函数的结束标志。

07行:声明主函数main()。这里的主函数不需要参数,也不返回函数值。

08行:主函数的开始标志“{”。

与01行的Delay()延时子函数一样,习惯上也会把下一行的语句与本行的花括号写在一起。

09行:声明一个无条件for()循环,“;;”以使单片机重复执行任务,使流水灯能不停地流动。

10行:大括号表示09行for()循环的开始,语句“Pl_0=0”是让单片机Pl口的O号引脚(即Pl.0)输出低电平,根据电路可知,此时LED1会被点亮。

11行:以参数值1000调用01行声明的Delay()延时子函数,使程序运行到此处时,延时1000毫秒(即1秒)。

12-41行:与10、11行的作用相同。

简而言之,10-41行的作用就是依次点亮LEDl-LED8这八个发光二极管

42行:09行结束标志,程序运行到此处时,自动返回09行,因为09行的for()循环是无条件循环,所以程序马上会转到10行继续运行。

三、软件仿

真首先按照前面的方法建立一个新的工程,并把上面的程序按照前面的方法输入并存盘。然后按照下面的方法进行仿真调试。

1.把建立好的C程序加入工程

双击左边工程窗口中的“Target1”,展开“Target1”夹,然后右击“SourceGroupl”,选择“增加文件到组‘SourceGroup1’(AddFilestoSourceGroup1)”,并把刚才输入的C程序加入到工程中。

2.连编目标程序

连编之前要设置目标的输出属性,否则连编出来的目标程序中不含有用于固化到单片机中的十六进制文件。

设置目标输出属性的方法是:

先单击工程窗口中的“Target1”以选中它,然后选择“工程”菜单中的“目标‘Targetl’属性(OptionsfortargetTargetl)”,系统弹出对话框,在对话框中选择“输出(Output)”选项卡,并选中“生成HEX文件(CreateHEXFile)”选项(生成十六进制文件),当然,如果你的单片机编程器不支持十六进制文件的话,就要用转换软件把生成的十六进制文件转换成二进制了。

设置好目标属性后,按“F7”开始连编目标程序。连编的结果信息会在输出窗口中显示出来,若显示“0错误(s),0警告(s)(0Error(s),0Warning(s))”表示连编成功,否则说明连编不成功。若连编不成功,在输出窗口中会显示错误所在行及错误原因,然后根据具体的错误进行修改,修改完成后,再次连编,直到连编成功。

3.仿真调试

连编好目标程序后就可以开始仿真调试了,其步骤是:

1)选择“调试(Debug)”菜单中的“开始/停止调试(Start/StopDebugSession)”,进入仿真调试状态。

2)选择“外围设备(Peripherals)”菜单中的“I/OPorts“选项中的“Port1”,打开I/O口状态模拟器。状态模拟器中的“&raDIC;”表示相应的I/O口引脚状态为“1”电平状态。

如:图中表示Pl口(Portl)的8个引脚全为“1”电平状态。

3)按“Fll”进行单步跟踪调试。每按一次“Fll”,程序会执行一步(即一条语句),若程序的执行影响了I/O口的状态,在I/O口状态模拟器上会有相应的显示。因为每按Fll一次,程序只执行一步,所以在调试循环程序时,可能会有很多的步数,如本例中每调试一次Delay()子函数中的两个循环,其步数高达六万步,因此要设法减少步数,本例中可先将Delay()子函数的参数值由1000改为1,等调试成功后再改回1000,这样就可以大大减少循环步数。

4)再次选择“调试(Debug)”菜单中的“开始/停止调试(Start/StopDebugSession)”,退出仿真调试状态。

四、程序固化

当程序通过了仿真调试,就可以利用编程器把它固化到单片机,并插入做好的线路板上,欣赏你的劳动成果了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6026

    文章

    44455

    浏览量

    630918
  • C语言
    +关注

    关注

    180

    文章

    7581

    浏览量

    135585
收藏 人收藏

    评论

    相关推荐

    单片机80C51控制流水灯

    80C51单片机控制流水灯 1使用汇编语言编写程序,8个LED灯接在P0口,显示出流水灯效果 2
    发表于 09-14 10:28 281次下载
    <b class='flag-5'>用</b><b class='flag-5'>单片机</b>80<b class='flag-5'>C</b>51控制<b class='flag-5'>流水灯</b>

    51单片机流水灯程序

    51单片机流水灯程序 51单片机流水灯程序 51
    发表于 12-21 15:52 170次下载

    LED流水灯程序C语言版】

    LED流水灯程序C语言版】LED流水灯程序C
    发表于 12-29 11:05 0次下载

    C8051F340单片机流水灯

    基于C8051F340单片机的一个流水灯实验程序,是C语言开发的
    发表于 06-17 16:48 31次下载

    单片机控制花样流水灯原理图及程序

    本文详细介绍了AT89C51单片机流水灯编写方法以及介绍了单片机32位LED花样流水灯
    发表于 04-26 16:15 5.5w次阅读
    <b class='flag-5'>单片机</b>控制花样<b class='flag-5'>流水灯</b>原理图及<b class='flag-5'>程序</b>

    使用51单片机控制的LED的流水灯C语言程序免费下载

    本文档的主要内容详细介绍的是使用51单片机控制的LED的流水灯C语言程序免费下载。
    发表于 03-25 18:19 17次下载
    使用51<b class='flag-5'>单片机</b>控制的LED的<b class='flag-5'>流水灯</b><b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>免费下载

    使用单片机实现流水灯C语言程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现流水灯C语言程序免费下载。
    发表于 08-15 17:32 1次下载
    使用<b class='flag-5'>单片机</b>实现<b class='flag-5'>流水灯</b>的<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>免费下载

    使用51单片机实现流水灯C语言程序实例免费下载

    本文档的主要内容详细介绍的是使用51单片机实现流水灯C语言程序实例免费下载。
    发表于 07-19 17:38 9次下载
    使用51<b class='flag-5'>单片机</b>实现<b class='flag-5'>流水灯</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>的<b class='flag-5'>程序</b>实例免费下载

    使用51单片机实现流水灯C语言程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现流水灯C语言程序免费下载。
    发表于 05-27 08:00 2次下载
    使用51<b class='flag-5'>单片机</b>实现<b class='flag-5'>流水灯</b>的<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>免费下载

    单片机C语言程序设计实例之双向来回的流水灯

    本文档的主要内容详细介绍的是单片机C语言程序设计实例之双向来回的流水灯免费下载。
    发表于 02-01 16:45 14次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>设计实例之双向来回的<b class='flag-5'>流水灯</b>

    基于AT89C51的单片机简易流水灯设计(C语言

    基于AT89C51的单片机简易流水灯设计(C语言)文章目录一、功能介绍二、代码展示三、仿真四、总结(一)思考题(二)注意的问题文章目录一、功
    发表于 11-05 11:06 19次下载
    基于AT89<b class='flag-5'>C</b>51的<b class='flag-5'>单片机</b>简易<b class='flag-5'>流水灯</b>设计(<b class='flag-5'>C</b><b class='flag-5'>语言</b>)

    AT89C51单片机流水灯c语言程序详解(扫盲教程)

    #include “REG51.h”AT89C51单片机流水灯c语言程序
    发表于 11-05 11:20 53次下载
    AT89<b class='flag-5'>C</b>51<b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b><b class='flag-5'>c</b><b class='flag-5'>语言</b><b class='flag-5'>程序</b>及<b class='flag-5'>详解</b>(扫盲教程)

    单片机流水灯

    单片机c51流水灯实验实验一 跑马灯实验一、实验目的1、熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法;2、掌握采用汇编
    发表于 11-17 09:36 8次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>

    51单片机流水灯实验

    基于51单片机流水灯实验 我们知道通过编写程序对51单片机进行控制,完成流水灯实验的方式有许多种。今天我们试通过51
    发表于 11-20 17:51 65次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>实验

    单片机流水灯

    单片机c51流水灯实验实验一 跑马灯实验一、实验目的1、熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法;2、掌握采用汇编
    发表于 11-29 12:51 10次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>