AT89C51用p1口的每一位能驱动驱动8个发光二极管从中间向两边扩散点亮,间隔时间为1秒,全亮后全灭,反复点亮

用51单片机P1口驱动8个LED做循环点亮控制,每个LED占空比50%,周期两秒_百度知道
用51单片机P1口驱动8个LED做循环点亮控制,每个LED占空比50%,周期两秒
急需,谢谢
我有更好的答案
#include &reg51.h&#include &intrins.h&#define uchar unsigned char#define uint unsigned intuchar Counter = 0;uchar P1LEDBUF = 0x01;//P1口的灯如果亮了7个,就改成0xFE;main()
{ P1=0x00;
//如果灯全亮了,则全部改为0xFF TMOD = 0x01;
//T0工作在定时方式1
//T0初值50ms
= 0xB0; ET0 = 1;
//开启定时器0中断 EA = 1;
//开总中断 TR0 = 1;
//启动定时器0 while(1);
}/********************************************//* 定时器0中断服务程序
*//********************************************/void T0_Serve()
interrupt 1{
TH0 = 0x3c;
//每次定时50ms TL0 = 0xb0; Counter++;
if(Counter == 20)
//中断20次后进入函数,时间刚好1秒(误差可以忽略)
Counter = 0;
P1 = P1LEDBUF ;
P1LEDBUF =_crol_(P1LEDBUF,1);
//位移P1口LED,准备下一轮
//如果灯亮和灭的刚好反了(熄了一个灯,亮了7个)就把初值改了
if(Counter == 40)
Counter = 0;//计数清0,周期2秒
P1 = 0x00//如果灯全亮了,则改为P1=0xFF;
采纳率:51%
R5, #10D2:
R7, #200D1:
RET返回主程序
程序要看你的硬件电路来写啊
首先给P1口送#0FEH 延时 左移 再次送P1口
其他1条回答
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 1523|回复: 1
单片机流水灯依次点亮实验报告 带仿真程序视频教程等
0.png (56.52 KB, 下载次数: 13)
20:44 上传
驻马店职业技术学院 机电工程 系单片机& &课程实验报告实验名称流水灯实验实验时间年& &月& &日学生姓名刘鑫实验地点单片机实训室同组人员
专业班级15高职机电一体化一、实验要求:(1)、在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路;(2)、继续在proteus软件中绘制电路,将p1口做输出口,接八只发光二极管;(3)、在keil软件中编写程序,实现功能间隔1s点亮一个发光二极管,顺序从p1.0到p1.7依次点亮;二、实验目的:(1)、学习proteus软件的,使用方法(2)、学习keil软件的使用方法(3)、学习端口输出的使用方法(4)、掌握延时程序的设计三、实验说明。在proteus软件中把实验要求的电路连接好,再利用keil软件把需要实现的功能编写程序,生成hex文件,把hes文件导入到proteus软件进行仿真。在编写程序时需要延时1s,我们选用的单片机是12MHz的,机器周期是12个时钟脉冲,一个时钟脉冲的时间是1/12微us,即一个周期为1us,程序中子函数void delay_ms(int x)中x为1 是可能延时1ms,以此类推可得1s=1000ms,当x=1000时刚好延时1s。四、硬件原理图及程序设计(1)、硬件原理图设计.电路中,p1.0到p1.7为LED控置端口,排阻RP1阻值为330兆,AT89c51单片机的9脚(RST)为复位引脚;31引脚(EA))为存取外部储存器使能引脚;单片机内部已接地,所以我们不用再接了。如下图所示
1.001.jpg (53.82 KB, 下载次数: 20)
20:46 上传
(2)、程序流程图(图片详见附件)
(3)、程序源代码
1.017.jpg (25.08 KB, 下载次数: 16)
20:46 上传
五、实验现象 结果
1.018.jpg (54.22 KB, 下载次数: 5)
20:46 上传
六、实验结果本实验应该是比较简单的。但实验中就是算时间的部分刚开始比较不懂,后通过老师的帮助,让自己理解了是怎么来计算。通过本次实验对点亮,LED灯有了一定的了解。这样也使自己对这门课变得更有兴趣。
全部资料下载地址(含视频教程):
(8.32 MB, 下载次数: 5)
16:33 上传
点击文件名下载附件
有图有程序下载积分: 黑币 -5
Powered by当前位置: >>
P1.0上实现LED灯闪烁
西安思源学院精品课程单片机原理与应用子项目一:P1.0 上实现 LED 灯闪烁 目标: 1、通过一个简单实例的仿真,掌握单片机仿真的基本过程 2、了解单片机 C51 程序设计基础。 3、掌握 keilC 编译器的使用。 4、掌握 proteus 仿真软件进行仿真的基本过程。 任务: 设计一个单片机最小应用系统,并在 P1.0 上实现 LED 灯闪烁 任务分解: 1、设计原理图; 2、利用 proteus 绘制原理图; 3、编写程序,并利用 KeilC 进行编译,生成 hex 文件; 4、利用 proteus 进行仿真调试 。 技能拓展: 1、proteus 软件使用。 2、KeilC 编译器使用 3、C51 程序设计 一、原理 由于需要实现的功能比较简单,所以单片机最小系统,时钟采用内部时钟, 复位采用上电复位,在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一 亮一灭,一亮一灭的时间间隔为 0.2 秒,电路图如下图所示。 西安思源学院精品课程单片机原理与应用二、原理图绘制 安装完 Proteus 后,运行 ISIS 7 Professional,会出现以下窗口界面:1、将所需元器件加入到对象选择器窗口: 本例要用到的元件有: AT89C51、电阻 (RES)电容 、 (CAP)电解电容 、 (HITEMP) 、 发光二极管(LED)、晶振(CRYSTAL) 单击对象选择器按钮 ,如图所示弹出“Pick Devices”页面,在“Keywords”输入 AT89C51,系统在对象库中进 行搜索查找,并将搜索结果显示在“Results”中,如图所示。 西安思源学院精品课程单片机原理与应用在“Results”栏中的列表项中,双击“AT89C51”,则可将“AT89C51”添加至 对象选择器窗口。然后用同样的步骤添加其他器件,完成后单击“OK”按钮, 结束对象选择。 最终结果:经过以上操作,在对象选择器窗口中,就有了需要的元器件对象,单击,在 预览窗口中,可见到的实物图,如图所示;此时,在绘图工具栏中的元器件按钮 处于选中状态。2、放置元器件至图形编辑窗口 西安思源学院精品课程单片机原理与应用在对象选择器窗口中,选中 AT89C51,将鼠标置于图形编辑窗口该对象的 欲放位置、单击鼠标左键,该对象被完成放置。同理,将其他器件放置到图形编 辑窗口中。如图所示。 若对象位置需要移动,将鼠标移到该对象上,单击鼠标右键,此时我们已经 注意到,该对象的颜色已变至红色,表明该对象已被选中,按下鼠标左键,拖动 鼠标,将对象移至新位置后,松开鼠标,完成移动操作。 3、放置电源和地 添加“地” :左键选择模型选择工具栏中的 图标,出现:左键选择GROUND,并在原理图编辑窗口中左击,这样“地”就被放置到原理图 编辑窗口中了。同理可以在需要电源的地方添加电源。4、元器件之间的连线 Proteus 的智能化可以在你想要画线的时候进行自动检测。下面,我们来操 作将电阻 R1 的右端连接到 LED 显示器的 A 端。 当鼠标的指针靠近 R1 右端的连 接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了 R1 的连接点,单 西安思源学院精品课程单片机原理与应用击鼠标左键,移动鼠标(不用拖动鼠标),将鼠标的指针靠近 LED 显示器的 A 端 的连接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了 LED 显示器 的连接点,同时屏幕上出现了粉红色的连接,单击鼠标左键,粉红色的连接线变 成了深绿色,同时,线形由直线自动变成了 90?的折线,这是因为我们选中了线 路自动路径功能。 Proteus 具有线路自动路径功能(简称 WAR),当选中两个连接点后,WAR 将 选择一个合适的路径连线。WAR 可通过使用标准工具栏里的“WAR”命令按钮 来关闭或打开,也可以在菜单栏的“Tools”下找到这个图标。 同理,我们可以完成其它连线。在此过程的任何时刻,都可以按 ESC 键或者 单击鼠标的右键来放弃画线。三、程序设计 1、 延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的 闪烁 时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指 令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下 面具体介绍其原理: 石英晶体为 12MHz,因此,1 个机器周期为 1微秒 机器周期 微秒 MOV R6,#20 2 个 2 D1: MOV R7,#248 2 个 2 DJNZ R7,$ 2 个 2×248 DJNZ R6,D1 2 个 2×20=40 2+2×248=498 20×498=10002 西安思源学院精品课程单片机原理与应用因此,上面的延时程序时间为10.002ms。 由以上可知,当 R6=10、R7=248 时, 延时 5ms,R6=20、R7=248时,延时 10ms, 以此为基本的计时单位。 如本实验要求 0.2秒=200ms, 10ms×R5=200ms, 则 R5 =20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET 2、输出控制 当 P1.0端口输出高电平,即 P1.0=1时,根据发光二极管的单向导电性可 知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发 光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0 端口输出高电平,使 用 CLR P1.0 指令使 P1.0 端口输出低电平。 3、程序框图4、汇编源程序 ORG 0 START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 西安思源学院精品课程单片机原理与应用5、 C 语言源程序 #include &AT89X51.H& sbit L1=P1^0; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i&0;i--) for(j=20;j&0;j--) for(k=248;k&0;k--); } void main(void) { while(1) { L1=0; delay02s(); L1=1; delay02s(); } } 四、利用KeilC进行编译程序,生成hex文件 Keil C51 软件是众多单片机应用开发的优秀软件之一, 它集编辑, 编译, 仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。 下面介绍 Keil C51 软件的使用方法 进入 Keil C51 后,出现编辑界面如下:进入 Keil C51 后的编辑界面 简单程序的调试 学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面 西安思源学院精品课程单片机原理与应用通过简单的编程、调试,引导大家学习 Keil C51 软件的基本使用方法和基本的 调试技巧。 1)建立一个新工程 单击 Project 菜单,在弹出的下拉菜单中选中 New Project 选项2)然后选择你要保存的路径,输入工程文件的名字,比如保存到 C51 目录里, 工程文件的名字为 C51 如下图所示,然后点击保存.3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单 片机来选择,keil c51 几乎支持所有的 51 核的单片机,我这里还是以大家用的比 较多的 Atmel 的 89C51 来说明,如下图所示,选择 89C51 之后,右边栏是对这个 单片机的基本的说明,然后点击确定. 西安思源学院精品课程单片机原理与应用4)完成上一步骤后,屏幕如下图所示下面开始编写我们的第一个程序。 5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁, 这时可以键入用户的应用程序了, 但笔者建议 首先保存该空白的文件,单击菜单上的“File” ,在下拉菜单中选中“Save As” 西安思源学院精品课程单片机原理与应用选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文 件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名 为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存” 按钮。6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单然后单击“Add File to Group ‘Source Group 1’ 屏幕如下图所示 ” 西安思源学院精品课程单片机原理与应用选中 Test.c,然后单击“Add ”屏幕好下图所示注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的 多少与所增加的源程序的多少相同。 7)输入 C 语言源程序: 在输入上述程序时, Keil c51 会自动识别关键字,并以不同的颜色提示用 户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后, 如下图所示: 西安思源学院精品课程单片机原理与应用8)在上图中,单击“Project”菜单,再在下拉菜单中单击“Built Target”选 项(或者使用快捷键 F7) 编译成功后, 再单击“Project”菜单, 在下拉菜 , 单中单击“Start/StopDebug Session” (或者使用快捷键 Ctrl+F5),屏幕如下所示:9)调试程序:在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项, (或者使用快捷键 F5) ,然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键 Esc) ;再单击“View”菜单,再在下拉菜单中 单击“Serial Windows #1”选项,就可以看到程序运行后的结果,其结果如下图 所示: 西安思源学院精品课程单片机原理与应用至此,我们在 Keil C51 上做了一个完整工程的全过程。 。但这只是纯软件 的开发过程,如何使用程序下载器看一看程序运行的结果呢? 10)单击“Project”菜单,再在下拉菜单中单击 “Options for Target ?Target 1? ” 在下图中,单击“Output”中单击“Create HEX File” 选项,使程序编译 后产生 HEX 代码,供下载器软件使用。把程序下载到 AT89S51 单片机中。5、添加仿真文件 双击AT89C51,出现如图所示窗口:出现文件浏览对话框,找到s1.hex文件,单击确定完成。 6、仿真: 单击 开始仿真。
解:(1)由P=UI可得,LED灯正常发光时的电流: ILED===0.05A; (2)电源的电压U=6V时, 因串联电路中总电压等于各分电压之和, 所以,串联电阻两端的电压: UR...用定时器0的方式1实现第一个发光二极管以_理学_高等教育_教育专区。用定时器0...定时器_1_控制LED灯闪烁 2页 免费
利用定时器控制LED灯闪烁... 2页 1下载...微机原理实验报告4-1 - 实验报告 专业 班级 组别 指导老师 五、程序 1、 用定时器 T0 用工作方式 1 实现 P1.0 所控制的 LED 每秒钟闪烁 1 次。 实验...用单片机实现1位LED数码管显示0-9_电子/电路_工程...由于将多功能 8 位 CPU 和闪烁存储器组合 在单个...P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51 RP1 ...看​100​小​时​无...灯​持​续​点​亮00...这款 LED 路灯能实现 10000 小时无光衰并不是空穴...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。AT89C51单片机的P1口控制8盏LED流水灯_百度知道
AT89C51单片机的P1口控制8盏LED流水灯
通电后最低位引脚接的灯先亮,然后熄灭,第二只引脚接的灯亮,再灭,按此方式直到第八盏灯,一个轮回后继续重复上一轮回直到断电,画出硬件电路图,设计程序,要求时间的延时用软件延时和定时器延时两种方法实现
我有更好的答案
# include &reg51.h&&&&&& &&&&&&&&&&&&&// 包含头文件#define uchar unsigned charvoid &delay02s(void)&&&&&&&&&&&&&& &&// 延时0.2s子程序&{&unsigned &char i,j,k;&&& for ( i=2;i&0;i-- )&&& for (j=200;j&0;j-- )&&& for (k=250;k&0;k-- );&}&void &main (void)&&&&&&&&&&&&&&&&&& &// 主函数{&uchar i,j;&while (1) &&&&&&&&&&&&&&&&&&&&&&&&&&// 死循环&{&j=0x01;&&&&&&&&&&&&&&&&&&&&&&&& // j初始化为0x01,左移初始值&for(i=0;i&8;i++)&&&&&&&&&&&&&&&& // for循环语句,完成8个循环&&{&&& P1= ~ j;&&&&&&&&&&&&&&&&&&&&&& // 对变量j 中的值按位取反后,从P1口输出&&& delay02s( );&&&&&&&&&&&&&&&&&&& // 延时0.2s&&& j= j&&1;&&&&&&&&&&&&&&&&&&&&&& // 左移1位&&}&& j=0x80;&&&&&&&&&&&&&&&&&&&&&&&&& // 设置右移初始值j为0x80&for (i=0;i&8;i++)&&{&&& P1= ~ j;&&& delay02s( );&& &&&&&&&j= j&&1;&&&&&&&&&&&&&& &&&&&&&&// 右移1位& &&&&&&&&}&&&&&& &}&&& &}这只是延时的方法实现的。
多谢你的回答啊,这是定时器延迟还是软件延迟啊?
延时。定时器的话,你可以试着这样去想一下:# include &reg51.h&
// 包含头文件#define uchar unsigned charuchar timeCvoid
main (void)
// 主函数{ TMOD = 0x01;TH0 = 0x3C;TL0 = 0xB0; ET0=1; EA=1;TR0=1; while (1) ;
// 死循环 }void Timer0() interrupt 1{ TH0 = 0x3C; TL0 = 0xB0; timeCnt++; if(timeCnt==20)
P1=0xFE; if(timeCnt==40)
P1=0xFD; if(timeCnt==60)
P1=0xFB; if(timeCnt==80)
P1=0xF7; if(timeCnt==100)
P1=0xEF; if(timeCnt==120)
P1=0xDF; if(timeCnt==140)
P1=0xBF; if(timeCnt==160)
{ P1=0x7F; timeCnt=0;}}方法大概是这样,我没有上机试过。你可以看看。
采纳率:80%
为您推荐:
其他类似问题
流水灯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。试编写程序实现:利用89C51单片机的P1口控制8个发光二极管,相临的4个发光二极管为一组,使两组每隔0.5..._百度知道
试编写程序实现:利用89C51单片机的P1口控制8个发光二极管,相临的4个发光二极管为一组,使两组每隔0.5...
试编写程序实现:利用89C51单片机的P1口控制8个发光二极管,相临的4个发光二极管为一组,使两组每隔0.5s交替发亮一次,周而复始。谁知道这道题答案啊?急求,答对给50分。
我有更好的答案
如:前四位与后四位分别间隔0.5S全亮则:while(1){P1 = 0X0F;延时0.5SP1 = 0XF0;延时0.5S }
采纳率:57%
写不开了,只写主程序void main(){P1=0x0F;
while(1) {
DelayMS(500); }}
#include &reg51.h&main(){a=0x0f;TMOD=0x01;P1=TH0=0x3c;TL0 = 0x3c;ET0=1;EA=1;TR0=1;while(1);}void Tt0() interrupt 1{a=~a;TH0=0x3c;TL0=0x3c;P1=a;}
用定时器,每隔0.5秒中断一次,在中断服务程序中用P1和0xff异或再赋值给P1,可实现两组交替亮灭
用什么写呀,是汇编,还是C语言呢?
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
发光二极管的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 施乐p115w驱动 的文章

 

随机推荐