单片机开关C51编程问题:怎样实现一个开关控制两个灯?按一次灯1亮;两次,灯1,灯2亮;三次,全灭。

内容提示:单片机开关应用技术C語言任务1 开关控制指示灯

文档格式:PPT| 浏览次数:2| 上传日期: 09:57:56| 文档星级:?????

}

如何使用 DX516 仿真器

如何编程点亮囷灭掉一个 LED 灯,

如何使用单步断点,全速停止的调试方法。

——————————————————————————————————————————

单片机开关现在是越来越普及了学习单片机开关的热潮也一阵阵赶来,许多人因为工作需要或者个人兴趣需要学習单片机开关

可以说,掌握了单片机开关开发就多了一个饭碗。

51 单片机开关已经有 30 多年的历史了在中国,高校的单片机开关课程大哆数都是 51而 51 经过这么多年的发展,也增长了许多的系列功能上有了许多改进,也扩展出了不少分支

而国内书店的单片机开关专架上,也大多数都是 51 系列

可以预见,51 单片机开关在市场上只会越来越多功能只会越来越丰富,在可以预见的数十年内是不可能会消失的

莋为一个初学者,如何单片机开关入门需要那些知识和设备呢?知识上其实不需要多少东西,会简单的 C 语言知道 51 单片机开关的基本結构就可以了。

一般的大学毕业生都可以快速入门自学过这 2 门课程的高中生也够条件。

就算你没有学过单片机开关课程只掌握了 C 语言嘚皮毛,通过本系列的教程您也会逐渐的进入单片机开关的大门。

当然在学习的过程中您还是必须多去研读单片机开关书籍,了解他們的基本结构及工作方式

——————————————————————————————————————————

下面以 51 为例来叻解一下单片机开关是什么东西,控制原理又是什么

在数字电路中,电压信号只有两种情况高电平和低电平,用数字来记录就是 1 和 0

單片机开关内部的CPU,寄存器总线等等结构都是通过 1 和 0 两种信号来运作的,数据也是以 1 或者 0 来保存的

单片机开关的输入输出管脚,也就昰 IO 口也是只输出或识别 1 和 0 两种信号,也就是高电平和低电平

当单片机开关输出一个或一组电平信号到 IO 口后,外部的设备就可以读到这些信号并进行相应操作,这就是单片机开关对外部的控制

当外部一个或一组电平信号送到单片机开关的 IO 口时,单片机开关也可以读到這些信号并进行分析操
作,这就是单片机开关对外部设备信号的读取

当然实际的操作中,这些信号可能十分复杂必须严格地按照规萣的时间顺序(时序)输入输出。

每种设备也都规定了自己的时序只要都严格遵守,就可以控制任何设备做出只要你想象得出的任何倳情。

您可能会再问我如何让单片机开关去控制和分析外部设备呢?

答案是程序您可以编写相关的程序,并且把他们烧写到单片机开關内部的程序空间单片机开关在上电时,就会一步一步按照您写的程序去执行指令做您想做的事情。

在 51 标准芯片中有 32 个输入输出 IO,汾为 4 组每组 8 个,分别为 P0 口P1 口,P2 口P3 口。

51 就是用这 32 个口来完成所有外部操作的

对于 51 的内部结构,如果您已经了解那是最好;如果不慬,也可以先放下在完成了本教程开始的几个章节之后,您就会大有兴趣自己去寻找资料阅读了。

当然如果您希望成为一个优秀的單片机开关开发程序员,还是必须熟悉单片机开关的内部结构及工作原理切不可偷懒!

在这一章,您将用程序去控制一个 LED 发光管的亮和滅

你应该知道,LED 发光管在通过一定电流时亮不通电就灭。

为了不让 LED 通过太大的电流把它烧坏我们还要串上限流电阻。

51 的 IO 是弱上拉的方式在输出高电平时,只能输出几十微安的电流到地而在输出低电平时,VCC 电源可以输入几十毫安

一般 LED 需要 10 毫安左右电流点亮我们就將 LED 接在电源 VCC 和 IO 口之间,中间串上电阻当 IO 输出低电平时,灯就亮了反之,灯就灭了

我们在这个程序里要控制的是 P1.0。

请参考一下我们将偠使用的试验板的电路图这个试验板是在购买 dx516 仿真器是赠送的。

————————————————————————————————————————

下面介绍一下仿真器和仿真环境

在实际的单片机开关学习和开发中,你可以用仿真器模拟一个 CPU 芯片让它按照您编寫的程序工作,并且进行调试一步步排除程序的 bug,使程序正常工作

程序工作正常后,您就可以用烧写器将您编写的程序烧入购买来的單片机开关芯片中让它自己去运行了。

要使用仿真器还得有一个编译调试的环境,这个环境是在计算机上运行的我们就在计算机上編写和调试程序,计算机和仿真器有连接仿真器中的各种数据和程序,都可以从计算机上观察到并可以观察变量,写入变量的值单步调试程序,在程序中设置断点调试全速运行,停止程序运行等等操作。

我们使用世界上目前最先进的 keil C51 编译调试环境仿真器使用大蝦电子网( )设计的 DX516 专业版仿真器,这个仿真器功能齐全性价比最佳,是学习开发的好工具!

您可以在此页 的资料下载栏目里下载到 keilc51 相關的中文说明资料这些资料详细地说明了如何使用 C51 编程和如何使用 keil uV2 环境调试,请在本章试验完成或者试验过程中如果遇到不懂的地方,一定要抽时间阅读!

您应该也可以在上面的网页中找到下载破解版本的 keilc51 的办法

中国法律规定,在学习和研究工作中使用有版权的软件昰可以的但是,如果您开发产品时建议您还是去购买一个正版的软件。

——————————————————————————————————————————

下面是 DX516 仿真器的使用介绍:

将仿真器和试验板按图 3 组装好串口线按照正确方向插入仿真器,另一端和電脑串口连接请尽量使用计算机的硬串口。

仿真器底座左边的跳线请放在 EMB 这边,以进入仿真状态

如果放在 RUN 这边,将会进入脱机运行狀态

晶振选择跳线请放在 IN 这边,以使用仿真器内部晶振内部晶振更加可靠。

如果放在 OUT 这边则会使用外部的用户板晶振。

图 3 仿真器插茬试验板上

因为用户板使用电流不大可以使用 usb 取电,usb 最大电流可以提供 500mA将 usb 取电板插入电脑的 usb 口中。(实际应用中如果用户板使用电鋶超过 100mA,我们就建议使用外部电源)

在仿真器上电或者按一下仿真器上面的按钮时,仿真器会发出“嘀-”表示仿真器正常启动。

同時仿真器上面的灯闪烁一次表示进入正常仿真状态。

C51 用户请在您的代码的 main()函数前面加上一句:

如果以上设置你没有做,在装载过程中仿真器会发出“嘀嘀嘀” 的三声短声报警,这时的仿真结果将可能不正确

在我们的例程中,这句话已经加入了

这句话并不会影响程序的工作,可以一直保留

请在硬件仿真设置选项中,选择 serial interrupt,在前面打勾如果以上设置你没有做在装载过程中,仿真器会发出“嘀-” 的┅声长声报警这时的仿真结果将可能不正确。

请在硬件仿真设置选项中选择 115200bps 波特率,所有 cache 都可以不选或者只选 cache code。

同时请选择正确的串口号

好了,现在可以开始做试验了我们打开已经建立好的工程和编写好的程序试验。

顺便还会学习一下程序调试的技巧

至于如何建立一个新工程,请参考 C51 的帮助文件或者自己摸索一下, 的 DX516专栏里也有“一步步教你如何第一次做…”的文章可以学习

这个界面是 uV3 的,和 uV2 是一样用的
点一下上图第三排第 2 或者第 3 个按钮(您的编译器按钮位置不一定在那个位置,自己找找)就可以看到编译结果了。

上媔显示是 0errrs,0warnings这是最佳的编译结果,如果有 error则无法进行下一步仿真,如果有 warning一定要尽量消除,确实无法消除的也要确认不会对程序造荿影响,才进行下一步的仿真

在编译结果中,我们还可以看到有 dataxdata,code 等用了多少字节的报告要注意您的单片机开关中是否有这么多的資源,如果不够将来烧片运行时就可能出现问题。

超出这些范围程序就不能在 AT89c51 中运行。

我们的例程中肯定都考虑了这些了肯定不会超出,因为 DX516 仿真器是和 SST89E516RD 有同样的容量的将来自己开发时就要注意了。

下面我们故意把第 9 行的 P10 写成 P11点编译,因为没有预先定义 P11所以就報告错误了,如下图:
双击一下错误报告的那一行窗口就也会跳到这一行,方便您进行修改

好了,现在请把错误改回去再编译一次,出现报告正确了以后下面开始仿真了。

点一下第二行第 5 个一个放大镜里面一个 d 字母的按钮就可以进入仿真了,仿真器要事先连接好喲

进入仿真后要退出仿真环境也是点这个按钮。

注意等会如果程序在正在全速运行时,仿真环境是不能直接退出的得先点停止运行後,再点仿真按钮才可以退出

点进入仿真按钮,程序开始装载PC 自动运行到了 main()停下,并指向了 main()函数的第一行

下面是进入了仿嫃环境的截图:
再顺便把调试界面上的按钮介绍一下:

进入仿真窗口后,如果出现的不是前面的源代码窗口而是夹有反汇编代码的窗口,直接关掉这个窗口就会恢复到代码窗口

下次进入也会直接进入到源代码窗口。

现在先试验单步点单步(两个单步都可以,一般点单步跨过)

PC 指针也指向了下一个程序行。

再点一下单步PC 又走下一步,灯灭了

再点一次,PC 走到挂起的程序行了继续点仍然在这一行。

這句指令其实就是使程序不断地跳到自己这一行别的什么也不做。

一般的实际应用中的程序是不会挂起的一般是在 main 函数里做一个大循環,程序如下:

请将 main 函数程序改为上面的代码我们下一步将试验断点的操作。

可以看到下面的提示窗口中显示:“connected to Monitor-51 V.DX”,后面的 V.DX 就是已经连接到大虾仿真器的提示了

V.DX 是大虾仿真器特有的标识。

在第 15 行双击一下可以看到程序行左边出现了一个红方块,这就是设置断点再双擊一次,断点就取消了

如果程序在全速运行的过程中遇到断点,就会自动停下来给你分析

注意在进入仿真后,并且程序是停止状态时才可以设置或者取消断点。

现在点全速运行可以看到程序在断点处停了下来,并且由于前一句指令刚刚执行了点灯所以这时灯是亮著的。

现在在第 14 行设置断点并且取消上一个断点。

现在点全速运行可以看到程序在断点处停了下来,并且由于刚刚执行了灭灯灯是滅着的。

好现在试验全速运行和停止。

把断点取消再点全速运行,可以看到灯是亮着的但是不是很亮,这是由于程序是循环的亮滅交替进行,亮的时间并不是全部的时间

现在点停止,可以看到程序停止了重复几次进行全速和停止,可以发现每次停止的地方不一萣是同一位置

}
c51单片机开关2*2矩阵按键控制四个灯按1键亮一个灯,按2键亮两个灯以此类推... c51单片机开关 2*2矩阵按键控制四个灯,按1键亮一个灯按2键亮两个灯,以此类推

你对这个回答的评價是

}

我要回帖

更多关于 单片机开关 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信