51单片机流水灯汇编程序:按键,流水灯开始显示,仿真成功,但是实物是初始亮,按键灭了(单片机流水灯汇编程序加电源后)。谢谢

怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮的,再按下去松开是灭的??_百度知道
怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮的,再按下去松开是灭的??
//预处理命令void main(void)
/设P1,点亮LED
for(a=0.3 口为低电平.0到P1;设P1;a&/;/&#47.3 口为高电平;
&#47,熄灭LED
while(1);/这是一个循环
P1_2 =1;a&60000;设P1_6 口为高电平;/这是一个循环
P1_0 =1.4 口为高电平;60000;
/设P1,熄灭LED
P1_4 =0;/
&#47,熄灭LED
P1_2 =0; a++),点亮LED
for(a=0.7阴极控制的LED点亮与熄灭控制;60000;&#47,熄灭LED
P1_7 =0,熄灭LED
//设P1;设P1;定义变量a 为int 类型
/设P1,熄灭LED
P1_5 =0;这是一个循环
/设P1;&#47.5 口为低电平,点亮LED
for(a=0;设P1,点亮时间由第二个FOR结构实现;
&#47,熄灭LED
/a++),刚接触单片机不太懂;/do while 组成
&#47.4 口为低电平;a++);a&
/60000;a++);
/设P1,熄灭LED
P1_1 =0.5 口为高电平;
&#47,点亮LED
//
&#47,所以麻烦大神们把程序写出来.7 口为低电平;主函数名{/a++);a++).1 口为高电平;a&a++);/&#47.7 口为高电平; a&//设P1;/a++);/设P1;60000。*/&#47.0 口为高电平.0 口为低电平;这是一个循环
P1_1 =1;a&lt本函数实现连接在P1;/这是一个循环
&#47,点亮LED
/AT89X51,点亮LED
for (a=0;/a&
/这是一个循环
//
/60000;设P1;这是一个循环
P1_3 =1.2 口为高循环;&#47,点亮LED
for(a=0;这是一个循环
P1_4 =1.1 口为低电平.2 口为低电平;
/设P1_6 口为低电平;&#47,点亮LED
for(a=0.h&a&///
/设P1;#include &}能不能在我的程序上继续添加代码来实现;
提问者采纳
你想实现什么样的效果?你意思8个流水灯一直在那里循环流动显示?然后按键控制亮灭?
对,就是一个开关按下去在松开是8盏流水灯亮,再按下去松开就灭了!
你知道怎么使用定时器没,可以用定时器实现,在定时器中断里面进行流水灯的操作。然后,如果按键按下的话,改变标志位的值为1,就停止定时器不让定时器计时,同时熄灭所有的灯。如果按键再按下,改变标志位的值为0,继续计时,从刚才保存的数里读出流水灯的值,继续流水灯的操作
我还没接触定时器啊,怎么办?在我这个程序上不能实现吗?
#include &reg51.h&#include &intrins.h&#define uchar unsigned char#define uint &unsigned int#define LED_PORT P1sbit Key = P3 ^ 7;void Delayms( uint ms ){ uint x,y; for( x=0; x& x++ )
for( y=0; y&124; y++ );}void InitTimer0( void ){ TMOD = 0x01; TH0 &= ( 65536 - 50000 ) / 256; TL0 &= ( 65536 - 50000 ) % 256; EA & = 1; ET0 &= 1; TR0 &= 1; }void main( void ){ bit LEDFlag = 0; LED_PORT = 0 InitTimer0(); while(1) {
if( !Key )
Delayms( 30 );
if( !Key )
LEDFlag =!LEDF
if( LEDFlag )
LED_PORT = 0
while( !Key );
}}&void Timer0_ISR( void ) interrupt 1{ static uchar cnt = 0; static uchar LEDData = 0 TH0 &= ( 65536 - 50000 ) / 256; TL0 &= ( 65536 - 50000 ) % 256;
cnt++; if( cnt &= 10 ) {
LED_PORT = LEDD
LEDData = _crol_( LED_PORT, 1 ); }}
请问这个程序哪地方有流水的语句?还请详细讲解一下,麻烦了!
Timer0_ISR函数里面
提问者评价
其他类似问题
w(0); P1_5 = 1;预处理命令void w(unsigned char k){ P1_1 = 0;主函数名{
while(1) {
/ P1_5 = 0; P1_7 = 1;
&#47。#include & P1_0 = 1,等待松开}void main(void)
w(1);/ P1_4 = 1;没有按就循环
while(; P1_7 = 0开关; P1_4 = 0;
w(0);/ 600; P1_2 = 0;/ P1_0 = 0.7 与地之间;
w(1); P1_6 = 1;
/ P1_2 = 1; a &lt.H&/ P1_3 = 0;
w(1); P1_3 = 1!P2_7);
w(0);AT89X51; P1_6 = 0; P1_1 = 1;延时消抖
while(P2_7),接在 P2;
w(0); a++);
//没有按就循环;按下就循环,等待按下
for (a = 0;
w(1);定义变量a 为int 类型
while(P2_7)
请问一下if循环中第二个while是什么意思,延时消抖是什么意思?
按键,按下的过程中,会有多次接触、断开。如果没有延时消抖过程,按下一次键,单片机就会进行多次的操作。看看我的百度空间吧,有许多的例程。
好的,谢谢啦。
为您推荐:
流水灯的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁  大街小巷随处可见变幻万千的流水灯,这种流水灯可用(十进制计数器,译码)实现灯光的流水效果,也能用AT89C51来实现。单片机相对于数子实现流水灯有明显的优越性,控制硬件电路外围元件较少,控制程序也较简单,制作比较容易,功能作用不低于数子电路设计。下面就单片机控制流水灯并用Proteus仿真进行介绍。    一、硬件电路及原理    流水灯实际上就是一个带有八个的单片机最小应用系统,即为由发光D1~D8、X1、v、单片机AT89C51和程序等组成的系统。其具体硬件组成见下图所示。    从原理图中可以看出,如果让接在P2.0口的Dl亮起来,那么只要把P2.0口的变为低电平就可以了:相反,如果要接在P2.0口的D1熄灭,就要把P2.0口的电平变为高电平:同理,接在P2.1&P2.7口的其他7只发光二极管点亮和熄灭的方法同D1。因此,要实现流水灯功能,只要将发光二极管D1~D8依次点亮、熄灭,8只发光二极管便会一亮一暗的做流水灯了。在此还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,在控制二极管亮灭的时候应该延时一段时间,否则就看不到&流水&效果了。
  二、C语言编程    单片机的应用系统由硬件和程序组成,上述硬件原理图搭建完成上电之后,还不能看到流水灯循环点亮的现象,要实现流水灯循环点亮,还要告诉单片机该怎么进行工作,即编写程序控制单片机管脚电平的高低变化,以实现发光二极管的一亮一灭。下面以8个发光二极管循环点亮来介绍两种C语言程序的编程方法。    1.位控法    位控方法采剧顺序程序结构,用位指令控制P2口的每一个位输出高低电平,从而来控制相应发光二极管的亮灭。程序如下:
  由上述程序得知:8个发光二极管循环点亮是通过逐个控制P2端口的每个位来实现的,因程序编制起来繁琐。所以程序结构显得较为复杂。    2.循环移位法    循环移位法利用循环移位指令,采用循环程序结构进行编程。在程序一开始就给P2口送一个数,这个数本身就让P2.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P2口,实现&流水&效果。具体编程如下所示,程序结构较为简单。
  三、Protuce仿真调试    采用Proteus仿真时,分以下几个步骤进行:    1.启动Proteus仿真软件    双击&1SIS&图标,出现ISIS操作页面。    2.搭建单片机系统仿真电路分    &器件选取&、&器件故置&和&电路连接&三步进行操作。    Code Files&对话框。再点击&New&按键,弹出&NewSource Files&对话框,即可以创建(只在文件名栏目输入一个文件名,后缀为ASM)或导入ASM源文件。确定后,&Add/Remove Source Code Files&对话框中&Source Code Filename&栏目即有ASM源文件名及路径,然后在&Code Generation Tool&栏目中选择&ASEM51&,最后点击&OK&按键,即完成了创建和导入ASM源文件。此后&Source&下即可以看到相应的ASM源文件。    3.编译ASM和导入HEX文件    编译ASM文件的前提是已导人ASM文件,启动编译的方法有两种:①进入菜单栏,选择&Source&下&Build All&,即弹出&BUILD &提示框,提示编译ASM文件的结果。②直接点击器件放置和运行区下方的&运行&按键,若ASM文件内容有变化,即自动对其编译,若问题即弹出&SOURCE CODE BUILD ER-RORS&提i讲匡,提示编译ASM文件的结果。编译ASM文件成功后即生成HEX文件,单片机导入HEX文件的方法是,打开单片机器件属住对话框,在&ProgramFiles&栏目里打开文件目录,选择装入HEX文件即可。单片机此后按照该HEX文件的代码运行程序。    4、调试方法。    进入菜单栏,选择&Debug&下&Start/Resart Debugging&,即进入调试状态,此后可以进行单步运行、全速运行、断点设置等功能操作。
  四、Kei与Proteus连接仿真调试    1、安装KeiIC &Vision2软件及vgdi程序    2.KeiIC的配置    ①进入KeiIC &Vision2开发集成环境,创建一个新项目(Project),选定AT89C51单片机CPU器件,并为该项目加入KeilC源程序(以上所编C语言程序)。    ②单击&Project菜单/Options for Target&选项或者点击工具栏的&option for to rget&按钮,弹出窗口,点击&Debug&按钮。    在出现的对话框里在右栏上部的下拉菜单里选中&Proteus VSM Monitor一51 Driver&。并且还要点击一下&Use&前面表明选中的小圆点。    再点击&Setting&按钮,设置通信接口,在&Host&后面添上&127.0.0.1&,如杲使用的不是同一台电脑,则需要在这里添上另一台电脑的lP地址(另一台电脑也应安装Proteus)。在&Pori&后面添加&8000&。点击&OK&按钮即可。最后将工程编译,进入调试状态,并运行。    ③Ptoteus的设置进入Proteus的ISIS.左键点击菜单&Debug&,选中&use romote debuger monitor&。此后,便可实现KeiIC与Proteus连接调试。    3、连接仿真调试    单击仿真运行开始按钮,能清楚地观察到每一个引脚的电频变化,红色代表高电频,蓝色代表低电频。
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670&噢哦,这个页面找不到了
下载作业帮可以找到更多答案单片机控制流水灯_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机控制流水灯
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩22页未读,继续阅读
你可能喜欢我写了一个单片机程序,本意是通过连续按键,形成流水灯的效果,但是我按了9次后灯全部熄灭,再按9次_百度知道
我写了一个单片机程序,本意是通过连续按键,形成流水灯的效果,但是我按了9次后灯全部熄灭,再按9次
while (t--){
time=2000; P3_2=1;
if(y==0x00){
y&STC12C5A灯又开始点亮;=1;sbit
P3_2=P3^2.h&intrins,哪里出了错.h&
while(time--)
_nop_()!P3_2);&#include & void delay(unsigned int t ){ unsigned int time !P3_2){
delay(1)!P3_2){
while(; }} main(){ unsigned int y=0x00; while(1){
if(。#include &quot
提问者采纳
y定义成了int行,定义char就行了
提问者评价
其他类似问题
为您推荐:
其他1条回答
1)!P3_2) {
while(main(){
unsigned char y = 0x01;
y = _crol_(y;
P0 = ~y!P3_2) {
delay(1)!P3_2);
while(1) {
流水灯的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 单片机按键控制流水灯 的文章

 

随机推荐