c语言编程软件写按下图点亮LED灯按如下顺序点亮D1-D2····D8···D1循环点亮并一直循环下去 间隔500ms

> 对不起!您查找的页面在火星,地球暂时无法访问
根据本站服务条款,天涯在线删除了本页部分内容
秒之后页面自动跳转,您可以:
2) 去其他地方逛逛:   6016人阅读
&第一课,了解单片机及单片机的控制原理和DX516 的用法,控制一个LED 灯的亮和灭本章学习内容:单片机基本原理,如何使用DX516 仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC51uV调试环境,如何使用单步,断点,全速,停止的调试方法聂小猛 2006 年6 月单片机现在是越来越普及了,学习单片机的热潮也一阵阵赶来,许多人因为工作需要或者个人兴趣需要学习单片机。可以说,掌握了单片机开发,就多了一个饭碗。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 口。P1 口的8 条脚就用P1.0 至P1.7 表示,其余类似。51 就是用这32 个口来完成所有外部操作的。对于51 的内部结构,如果您已经了解,那是最好;如果不懂,也可以先放下,在完成了本教程开始的几个章节之后,您就会大有兴趣,自己去寻找资料阅读了。当然,如果您希望成为一个优秀的单片机开发程序员,还是必须熟悉单片机的内部结构及工作原理,切不可偷懒!在这一章,您将用程序去控制一个LED 发光管的亮和灭。你应该知道,LED 发光管在通过一定电流时亮,不通电就灭。为了不让LED 通过太大的电流把它烧坏,我们还要串上限流电阻。51 的IO 是弱上拉的方式,在输出高电平时,只能输出几十微安的电流到地,而在输出低电平时,VCC 电源可以输入几十毫安的电流到IO。一般LED 需要10 毫安左右电流点亮,我们就将LED 接在电源VCC 和IO 口之间,中间串上电阻,当IO 输出低电平时,灯就亮了,反之,灯就灭了。我们在这个程序里要控制的是P1.0。请参考一下我们将要使用的试验板的电路图,这个试验板是在购买dx516 仿真器是赠送的。图1,试验电路图
图2:试验板外观图
下面介绍一下仿真器和仿真环境。在实际的单片机学习和开发中,你可以用仿真器模拟一个CPU 芯片,让它按照您编写的程序工作,并且进行调试,一步步排除程序的bug,使程序正常工作。程序工作正常后,您就可以用烧写器将您编写的程序烧入购买来的单片机芯片中,让它自己去运行了。要使用仿真器,还得有一个编译调试的环境,这个环境是在计算机上运行的,我们就在计算机上编写和调试程序,计算机和仿真器有连接,仿真器中的各种数据和程序,都可以从计算机上观察到,并可以观察变量,写入变量的值,单步调试程序,在程序中设置断点调试,全速运行,停止程序运行,等等操作。我们使用世界上目前最先进的keilC51 编译调试环境,仿真器使用大虾电子网(
)设计的DX516 专业版仿真器,这个仿真器功能齐全,性价比最佳,是学习开发的好工具!您可以在此页 的资料下载栏目里下载到keilc51 相关的中文说明资料,这些资料详细地说明了如何使用C51 编程和如何使用keil uV2 环境调试,请在本章试验完成或者试验过程中,如果遇到不懂的地方,一定要抽时间阅读!您应该也可以在上面的网页中找到下载破解版本的keilc51 的办法。中国法律规定,在学习和研究工作中使用有版权的软件是可以的,但是,如果您开发产品时,建议您还是去购买一个正版的软件。下面是DX516 仿真器的使用介绍:1。安装将仿真器和试验板按图3 组装好,串口线按照正确方向插入仿真器,另一端和电脑串口连接,请尽量使用计算机的硬串口。仿真器底座左边的跳线,请放在EMB 这边,以进入仿真状态。如果放在RUN 这边,将会进入脱机运行状态。晶振选择跳线请放在IN 这边,以使用仿真器内部晶振,内部晶振更加可靠。如果放在OUT 这边,则会使用外部的用户板晶振。图3 仿真器插在试验板上
2。电源因为用户板使用电流不大,可以使用usb 取电,usb 最大电流可以提供500mA,将usb 取电板插入电脑的usb 口中。(实际应用中,如果用户板使用电流超过100mA,我们就建议使用外部电源)3。启动在仿真器上电,或者按一下仿真器上面的按钮时,仿真器会发出&嘀-&,表示仿真器正常启动。同时仿真器上面的灯闪烁一次,表示进入正常仿真状态。4。仿真设置第一个设置:C51 用户请在您的代码的main()函数前面,加上一句:char code dx516[3] _at_ 0x003b;如果以上设置你没有做,在装载过程中,仿真器会发出&嘀嘀嘀& 的三声短声报警,这时的仿真结果将可能不正确。在我们的例程中,这句话已经加入了。这句话并不会影响程序的工作,可以一直保留。第二个设置:请在硬件仿真设置选项中,选择serial interrupt,在前面打勾。如果以上设置你没有做,在装载过程中,仿真器会发出&嘀-& 的一声长声报警,这时的仿真结果将可能不正确。其余设置:请选择use keil Monitor-51 Driver ,这样才会使用硬件仿真请选择load Application at start ,在启动时直接装载程序请选择Go till main ,装载后直接运行到main 函数请在硬件仿真设置选项中,选择115200bps 波特率,所有cache 都可以不选,或者只选cache code。同时请选择正确的串口号。图4 仿真设置
好了,现在可以开始做试验了,我们打开已经建立好的工程和编写好的程序试验。顺便还会学习一下程序调试的技巧。至于如何建立一个新工程,请参考C51 的帮助文件,或者自己摸索一下, 的DX516专栏里也有&一步步教你如何第一次做&&的文章可以学习。请双击lessoncode01 目录下的lesson1.uv2,打开后界面如下:图6:程序界面
这个界面是uV3 的,和uV2 是一样用的。点一下上图第三排第2 或者第3 个按钮(您的编译器按钮位置不一定在那个位置,自己找找),就可以看到编译结果了。上面显示是0errrs,0warnings,这是最佳的编译结果,如果有error,则无法进行下一步仿真,如果有warning,一定要尽量消除,确实无法消除的,也要确认不会对程序造成影响,才进行下一步的仿真。在编译结果中,我们还可以看到有data,xdata,code 等用了多少字节的报告,要注意您的单片机中是否有这么多的资源,如果不够,将来烧片运行时就可能出现问题。比如AT89C51 的程序空间是4K,xdata 如果没有外扩就是0 个,data 是128 个。超出这些范围,程序就不能在AT89c51 中运行。不同的芯片有不同的容量,如SST89E516RD 就有64K 程序,内部768 字节XDATA,还有256 个字节的data。我们的例程中肯定都考虑了这些了,肯定不会超出,因为DX516 仿真器是和SST89E516RD 有同样的容量的,将来自己开发时就要注意了。下面我们故意把第9 行的P10 写成P11,点编译,因为没有预先定义P11,所以就报告错误了,如下图:
双击一下错误报告的那一行,窗口就也会跳到这一行,方便您进行修改。好了,现在请把错误改回去,再编译一次,出现报告正确了以后,下面开始仿真了。点一下第二行第5 个一个放大镜里面一个d 字母的按钮,就可以进入仿真了,仿真器要事先连接好哟。进入仿真后要退出仿真环境也是点这个按钮。注意,等会如果程序在正在全速运行时,仿真环境是不能直接退出的,得先点停止运行后,再点仿真按钮才可以退出。点进入仿真按钮,程序开始装载,PC 自动运行到了main()停下,并指向了main()函数的第一行。下面是进入了仿真环境的截图:
再顺便把调试界面上的按钮介绍一下:图5:按钮说明
进入仿真窗口后,如果出现的不是前面的源代码窗口,而是夹有反汇编代码的窗口,直接关掉这个窗口就会恢复到代码窗口。下次进入也会直接进入到源代码窗口。现在先试验单步,点单步(两个单步都可以,一般点单步跨过)。可以看到灯亮了。PC 指针也指向了下一个程序行。图:照片,灯亮再点一下单步,PC 又走下一步,灯灭了。再点一次,PC 走到挂起的程序行了,继续点仍然在这一行。这句指令其实就是使程序不断地跳到自己这一行,别的什么也不做。一般称作程序挂起。一般的实际应用中的程序是不会挂起的,一般是在main 函数里做一个大循环,程序如下:void main(void) // 主程序{while(1){P11=0;//亮灯P10=1;//灭灯}}请将main 函数程序改为上面的代码,我们下一步将试验断点的操作。编译后结果如下:
图:进入仿真后图:
可以看到下面的提示窗口中显示:&connected to Monitor-51 V.DX&,后面的V.DX 就是已经连接到大虾仿真器的提示了。V.DX 是大虾仿真器特有的标识。在第15 行双击一下,可以看到程序行左边出现了一个红方块,这就是设置断点,再双击一次,断点就取消了。如果程序在全速运行的过程中遇到断点,就会自动停下来给你分析。注意在进入仿真后,并且程序是停止状态时,才可以设置或者取消断点。图:设置了断点
现在点全速运行,可以看到程序在断点处停了下来,并且由于前一句指令刚刚执行了点灯,所以这时灯是亮着的。现在在第14 行设置断点,并且取消上一个断点。图:设置了另一个断点
现在点全速运行,可以看到程序在断点处停了下来,并且由于刚刚执行了灭灯,灯是灭着的。好,现在试验全速运行和停止。把断点取消,再点全速运行,可以看到灯是亮着的,但是不是很亮,这是由于程序是循环的,亮灭交替进行,亮的时间并不是全部的时间。现在点停止,可以看到程序停止了,重复几次进行全速和停止,可以发现每次停止的地方不一定是同一位置。这一课就先结束了,我们学习了如何点灯及一些基本的编译和调试操作,下一课将学习如何使LED 闪烁,和更多的调试方法,和如何查看运行状态和设置内部寄存器的值。课后作业:改为第2 个LED 灯(P1.1)做完本章的试验。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:150987次
积分:2006
积分:2006
排名:第7326名
原创:63篇
转载:38篇
评论:40条
(3)(1)(2)(1)(3)(1)(1)(1)(1)(2)(2)(1)(7)(5)(1)(2)(1)(6)(3)(9)(16)(5)(1)(2)(3)(2)(5)(6)(8)> 手把手教你使用PIC单片机点亮LED发光管(C语言版)
管理员:&人数:66小组积分:730简介:单片机读写U盘方案-SL811HST开发套件(增强版)361.00元ELITE-III单片机学习开发系统283.10元51单片机开发板(1602液晶+温度+通信+储存+下载线+变压器)144.00元增强型51实验板140.60元aclass="blue"href="http:小组公告小组暂无公告.&&|&&&&|&&
需要确认注册邮箱后才能下载,
楼主&&[其他]&
手把手教你使用PIC单片机点亮LED发光管(C语言版)
积分:32530分
总积分:59881分
发表于 15:01
发光二极管,也叫做LED,是种非常常用的指示器件,比如电源指示、工作指示等,即便你不怎么留心,恐怕还是在不少场合见到过的,比如各种充电器,它们用亮或者灭告诉你电源是否已经接通,用颜色的变化告诉你电池是否已经充满,再比如有不少设备,往往采用发光二极管的闪烁来表示系统正在正常工作。同时,因为它的控制比较简单有趣,所以我们的实验就选择从这里开始。&&& 首先我们需要知道如何让一个发光二极管工作。发光二极管有很多类,如图1-1所示的是几种直径3mm的普通亮度发光二极管,电器原理图则如图1-2所示,当在它的A和K两个电极加上合适的电压的时候,它就会亮起来。说“合适的电压”,是因为不同的发光二极管工作电压并不相同,一般是在1.6V到2.8V之间,而工作电流则一般在2到30mA之间,但是实际工作的选择范围一般是4到10mA之间。&图1-1、发光二极管实物图图1-2、发光二极管原理图&&&&这里之所以要说这些参数,实际是为了解释LED上串接电阻大小的选择。图1-4是跟增强型PIC实验板上跟LED控制相关部分的电路,我们可以看到LED上串接的电阻是470欧姆,如果此时LED上的电压是2.0V,那么此时通过LED的电流则为(5V-2V)/470Ω=6.38mA,如果需要提高亮度,一般会电流控制在10mA左右,则此时电阻应该选择(5V-2V)/10mA=300Ω,所以可以就近选择330Ω。&&&&电路已经确定,然后就是连接到单片机的I/O口上,见图1-4,我们可以看到LED的A极通过限流电阻连接到PIC单片机的I/O口,K极连接到了GND地线,因此要使LED发光,也就是使电流流过LED,只需要把I/O口置成高电平即可,所以最终我们对LED的控制变成了对一个I/O口的控制,比如要点亮标号为“D10”的LED,就是把RC0口设置成高电平而已,这就是实现方法。图1-3、增强型PIC实验板实物照片图1-4、单片机控制LED显示的原理图&&&&先把“ICD2 PIC仿真烧写器”与“增强型PIC实验板相连”,插上所需要的连接线缆并与PC机相连,前面部分我们已经学会了搭建PIC学习和开发的硬件与软件环境。现在,我们只要在这些环境基础上编写程序代码实施验证即可,注:在以后的系列教程中,我们仍将以这些软硬件环境为基础进行讲述。&&&&我们创建完工程后,编写第一个点亮LED发光管的程序代码如下:#include &pic.h&main(){&&TRISC=0X00; /*TRISC寄存器被赋值,PORTC每一位都为输出*/&&while(1) /*循环执行点亮发光二极管的语句*/&&&&{&&&&&&PORTC=0X02; /*向PORTC送数据,点亮第二个LED发光管*/ &&&&}}&&&这是一个最简单的PIC点LED的C程序代码,也希望能给初学者朋友们一个感性的认识,我已把能省略的语句尽量都省去了,能把每句话都看懂了,PIC的C程序最小框架你也就明白了。&&&第一行 #include &pic.h& 用于加载标准库函数,如51单片机中的 reg51.h 库文件一样。&&&main()是C语言中的主函数,一个C程序代码中,也只有一个main()主函数,程序就是从这里开始执行的。&&&语句“TRISC=0X00;”用来设置RC口的输入、输出状态。&&&while(1)&是死循环语句,即周而复始地执行{ }内的语句体,如我们现在的程序中的作用即是不停地执行&PORTC=0X02; 这条语句。&&&语句“&PORTC=0X02;”的功能则是给RC口赋值,即第二个引脚RC1为高电平,用“1”来表示。&& 说明:PIC系列单片机各类数据存储器都是以寄存器方式工作和寻址的。专用寄存器包括了定时寄存器TMRO、选择寄存器OPTION(又称为项选寄存器)、程序计数器PCL、状态寄存器STATUS、间接寻址寄存器INDF和FSR、端口I/O寄存器(如PORTA、PORTB…)和相对应的端口I/O控制寄存器(又称为端口I/O数据方向寄存器,如TRIAS、TRISB…)、保持寄存器PCLATH和中断控制寄存器INTCON等。我们现在暂时只用到了TRISC和PORTC口寄存器。&&&该程序实验效果如下:&&&&现在我们知道了,可以通过改变PORTC口的数据来得到不同的花样灯效果,因此,我们只要按自己的意想来改变程序代码即可,下面是一些改制实例:点亮第八个LED发光管的程序花样流水灯运行瞬间截图之一花样流水灯运行瞬间截图之二花样流水灯运行瞬间截图之三以下是一段让实验板上第一个LED发光管闪亮的C程序,大家可以实际编译运行一下看看最终效果:#include &pic.h&void delay(){for(k=0;k&6000;k++);}void main(){TRISC=0X00; /*TRISC寄存器被赋值,PORTC每一位都为输出*/while(1) /*循环执行点亮发光二极管的语句*/&{&&PORTC=0X01; /*向PORTC送数据,点亮LED发光管*/&&delay();&&PORTC=0X00;&&delay(); &}}以下是部分实验源程序演示实验视频录像 增强型PIC实验板点亮LED发光管实验演示录像之一
——日 制作加入 增强型PIC实验板点亮LED发光管实验演示录像之二
——日 制作加入
huangna 编辑于 15:02
1楼&&[其他]&
Re:手把手教你使用PIC单片机点亮LED发光管(C语言版)
积分:32530分
总积分:59881分
发表于 15:02
资料由杭州晶控电子提供。这些手把手教你学pic单片机是针对增强型PIC 实验板的,
--- 现有 2个主题,共 1页,目前第 1页 ---&&
点击,立即回复。
IC厂商小组
在线研讨会
赞助商链接
2014 EDN China -- Use of this website is subject to its terms of use.
京ICP备号-1 |
京公网安备 |用汇编语言编流水灯,有8个LED灯,LED1~LED8 灯按顺序点亮,每个等亮一秒转到下个灯,一直循环亮_百度知道
用汇编语言编流水灯,有8个LED灯,LED1~LED8 灯按顺序点亮,每个等亮一秒转到下个灯,一直循环亮
采用外部中断,按下中断按钮灯亮一秒后熄灭。需画出电路图
能不能写上注释啊??????
提问者采纳
SJMP DELAYMAIN:MOV P0,#0EEH
CALL DELAY
MOV P0,#0EDH
CALL DELAY
MOV P0,#0EBH
CALL DELAY
MOV P0,#0E7H
CALL DELAY
MOV P0,#0DEH
CALL DELAY
MOV P0,#0DDH
CALL DELAY
MOV P0,#0DBH
CALL DELAY
MOV P0,#0D7H
CALL DELAYDELAY:MOV R0,#50HD1:MOV R1,#100HD2:MOV R2,#100H
DJNZ R1,D2
DJNZ R0,D1RETEND
能不能补上注释啊?采用外部中断怎么没有啊 INT0
ORG 0000H复位入口
SJMP MAIN转到主程序
ORG 0030H主程序入口
SJMP DELAY跳到延时程序MAIN:MOV P0,#0EEH;把#0EEH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0EDH;把#0EDH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0EBH;把#0EBH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0E7H;把#0E7H送到P0端口
CALL DELAY调用延时程序
MOV P0,#0DEH;把#0DEH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0DDH;把#0DDH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0DBH;把#0DBH送到P0端口
CALL DELAY调用延时程序
MOV P0,#0D7H把#0D7H送到P0端口
CALL DELAY
调用延时程序DELAY:MOV R0,#50H;延时程序,把#50H送进R0D1:MOV R1,#100H;把#100H送进R1D2:MOV R2,#100H;把#100H送进R2
DJNZ R1,D2;做R1减一运算,不等于0则跳到D2
DJNZ R0,D1;R0做减一运算,不等于0则跳到D1RET;子程序返回END ;程序结束
提问者评价
其他类似问题
led灯的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1. 用C语言编写一段程序,用P1口作为控制端口,使D1~D8的LED如流水灯般点亮,给出程序及流程_百度知道
1. 用C语言编写一段程序,用P1口作为控制端口,使D1~D8的LED如流水灯般点亮,给出程序及流程
so easy,这是基础入门级别的设计了百度一下就有好多关于51单片机流水实验
其他类似问题
按默认排序
其他1条回答
不知道你在学校学什么的,再第二个流水灯的程序都脸累斥秆俪飞符嫩让别人帮你写。告诉你一个最简单的,先直接对第一个IO复制,依次类推,然后延时
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言编程软件 的文章

更多推荐

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

点击添加站长微信