标题: 怎么用51单片机点亮流水灯? [打印本页]
作者: 若n1碰到他 时间: 2016-11-8 20:55
标题: 怎么用51单片机点亮流水灯?
怎么用51单片机点亮流水灯?求电路图
作者: benq1 时间: 2016-11-8 21:01
#include <REG51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
void delay (uint);// 延时函数
void delay (uint x)
{
uchar tw;
while (x-->0)
{
for (tw=0;tw<125;tw++){;}
}
}
void main(void)
{
while( 1)
{
P1=0xff;
delay(50);
P10=0;
delay(50);
P10=1;
P11=0;
delay(50);
P11=1;
P12=0;
delay(50);
P12=1;
P13=0;
delay(50);
P13=1;
P14=0;
delay(50);
P14=1;
P15=0;
delay(50);
P15=1;
P16=0;
delay(50);
P16=1;
P17=0;
delay(50);
}
}
我也刚试验成功。图画的不好,见谅。
作者: qwer159753 时间: 2016-11-8 21:12
简单呢
作者: wuyibin2003 时间: 2016-11-9 08:28
楼上已经给你贴出来了呀 可以用左移 也可以用右移函数
作者: ch3odndff 时间: 2016-11-9 08:46
就是规律地控制引脚点位的高低
作者: lyhot 时间: 2016-11-9 15:07
自己查资料 效果好
作者: lucky666 时间: 2016-11-9 15:16
先赋格初值,直接用左移或右移函数就搞定了。
作者: 超电磁场 时间: 2016-11-9 15:33
讲真,不会是大学作业吧
作者: 238753688 时间: 2016-11-9 16:03
简单呢
作者: woshishihaode 时间: 2016-11-9 19:25
还有更简单的;楼上那个定义太复杂了
作者: woshishihaode 时间: 2016-11-9 19:28
本帖最后由 woshishihaode 于 2016-11-9 19:31 编辑
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int i)
{unsigned int k;
for(k=0;k<i;k++);
}
void main()
作者: woshishihaode 时间: 2016-11-9 19:28
{P1=0xfe;while(1){
作者: woshishihaode 时间: 2016-11-9 19:30
本帖最后由 woshishihaode 于 2016-11-9 19:32 编辑
P1=_cror_(P1,1);delay(5000);}}//里面的可更,看你要好快!!--表示分行哈
作者: 小白吕 时间: 2016-11-9 20:01
#include<reg51.h>
#include<intrins.h>
作者: 英语 时间: 2016-11-9 20:34
给你想要点亮灯的引脚给一个0,就可以了
作者: 若n1碰到他 时间: 2016-11-9 20:54
不是的,我大二,自己想做点东西出来,理论知识跟不上。
作者: 若n1碰到他 时间: 2016-11-9 20:57
如果我想接32个二极管呢?该怎么改写程序?
作者: jyfans 时间: 2016-11-10 12:38
这是基础 了 先学c语言
作者: mhl10103617 时间: 2016-11-10 22:01
使其左右移就可以了
作者: 794983432 时间: 2016-11-10 23:35
你要看看是想共阴还是共阳
作者: 凯伦之宝 时间: 2016-11-11 14:09
自己查资料,比较简单
作者: 王玉珍 时间: 2016-11-11 14:39
#在这#include <REGX52.H>里快速回复#
作者: zl2168 时间: 2016-11-12 13:27
本帖最后由 zl2168 于 2016-11-12 13:38 编辑
32个二极管,初学者一般用4个I/O口,4*8=32,但这样不好,是笨办法。应该是I/O口扩展,I/O口扩展有并行扩展和串行扩展。
给你介绍几个案例
第4章 扩展输入输出应用
4.1 并行扩展
实例21 并行扩展TTL输入输出口
实例22 并行扩展8255
实例23 并行扩展8155
实例24 并行扩展RAM 6264
4.2 同步移位寄存器串行扩展
实例25 74HC165串行输入8/16位数据信号
实例26 CC4021串行输入8/16位数据信号
实例27 CC4014串行输入8/16位数据信号
实例28 74HC164串入并出控制8/16循环灯
实例29 CC4094串入并出控制8/16循环灯
实例30 74HC595串入并出控制8/16循环灯
实例31 74HC164+165串行输入输出
实例32 CC4021+4094串行输入输出
实例33 74HC164+165虚拟串行输入输出
实例34 CC4021+4094虚拟串行输入输出
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
作者: dianmy 时间: 2016-11-12 22:48
用—crol_函数实现
作者: canghaiwuhen 时间: 2016-11-13 00:19
原理图?买的开发板应该都带啊
作者: qi_dianzikeji 时间: 2016-11-20 21:01
为啥传不了图。就是做好最小系统,把LED接在随意I/O口就行。在LED前接10K的电阻为上拉电阻。如接在了P0口则P0=0XFF则全亮
作者: 953164692 时间: 2016-11-20 22:02
楼上的比较麻烦,可以用位移,简单方便。
作者: liyanchao153 时间: 2016-11-20 22:26
初学者,多看几遍视频,效果比较好。
作者: jiejie001 时间: 2016-11-20 22:37
楼上回复了,祝成功,加油
作者: 灵风少人 时间: 2016-11-20 23:42
自己查资料印象高,楼上的方法都不错。
作者: qiuhao 时间: 2016-11-21 08:41
先看懂电路图
作者: 想爱无依 时间: 2016-11-21 11:51
用数组
作者: taotaobujue 时间: 2016-11-21 16:30
楼上很详细
作者: dict020 时间: 2016-11-21 16:45
谢谢分享
作者: 爱学习的小冰 时间: 2016-11-22 02:18
可以先去看看例程,然后结合自己所知的理论知识再把它彻底弄懂。
//--包含你要使用的头文件
#include <reg52.h> //此文件中定义了51的一些特殊功能寄存器
//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms
main()
{
unsigned char LED,i;
LED = 0xfe; //0xfe = 1111 1110
while (1)
{
P0 = LED;
Delay10ms(50);
for(i=8;i>0;i--)
{
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
}
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (b=c;b>0;b--)
{
for (a=114;a>0;a--);
}
}
}
作者: Treasure9479 时间: 2016-11-22 19:20
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int i)
{unsigned int k;
for(k=0;k<i;k++);
}
void main()
作者: yangwenmou8 时间: 2016-11-23 09:22
二楼正解啊,很详细
作者: zz123zz 时间: 2016-11-23 10:37
二楼正解啊,很详细
作者: yff璠 时间: 2016-11-23 16:13
循环P1=_cror_(P1,1)右移
循环P1=_crol_(P1,1)移左
作者: 1272270359 时间: 2016-11-24 10:27
挺简单的,我刚做
作者: liuguihua 时间: 2016-11-24 10:46
很简单的,点亮一个,延时一下,然后电亮下一个,熄灭之前的,延时一下,然后循环
作者: 515fgvds 时间: 2016-11-24 11:21
我有教程 983702898
作者: fbu 时间: 2016-11-24 11:44
给个高电平就好了
作者: 柔柔弱弱任溶溶 时间: 2016-11-24 13:30
网上很多的
作者: chujx1981 时间: 2016-11-24 14:48
将LED的阴极通过电阻1K接到某一个单片机引脚,阳极接5V电源,通过程序向该引脚间断写1和0,就可点亮和熄灭LED
作者: li353747021 时间: 2016-11-24 15:25
基础知识不行还是跟我一样多逛逛论坛多看看资料和视频吧!看郭天祥的视频蛮好的!我就在看!
作者: li353747021 时间: 2016-11-24 16:42
基础知识差还是多看看资料多逛逛论坛,郭天祥的视频不错你可以看看!
作者: 719738849 时间: 2016-11-24 20:25
先点亮一个灯 延时 关闭 再把位置移位再点亮 重复
如把P0^0点亮再关闭再点亮P0^1 然后继续
作者: VxpV 时间: 2016-11-25 10:54
用左移函数
作者: sgdagiuafga 时间: 2016-11-25 12:06
简单的
作者: czx_china 时间: 2016-11-25 13:26
呵呵,书上的内容仔细看看可以
作者: 四少的刀 时间: 2016-11-25 21:08
调用intrins.h库函数,P0=_crol_(P0,1); //左移
作者: 416356084 时间: 2016-11-25 21:59
大家都很积极啊
作者: Anethon 时间: 2016-11-25 22:29
延时位移
作者: qj1049167363 时间: 2016-11-25 22:52
buzhidaoa a a aa a
作者: 叽里咕噜 时间: 2016-11-25 23:55
我也想知道
作者: qwertyuio543 时间: 2016-11-26 07:31
点亮流水灯的仿真论坛里多的是
作者: 常长诀 时间: 2016-11-26 13:08
楼上是大神
作者: tbcgz66 时间: 2016-11-26 14:43
用左移或者右移,就不用单独定义8个io口了
作者: 想爱无依 时间: 2016-11-26 16:46
//**名称:单片机c语言程序设计100例 ******** //*** 时间:2016.7.19 Saturday Sunny ***** //**** 编写:一抹微笑^一抹阳光 *************** //***** 例4:右移8位流水灯 ********************** #include<reg52.h> #define uint unsigned int #define uchar unsigned char void delay_ms(uint a) { uint i; while(a--); for(i=0;i<168;i++) { } } void main() { uchar k; while(1) { P1=0XFF; delay_ms(30000); for(k=0;k<8;k++) { P1=P1>>1; delay_ms(30000); } } }
作者: 梦不虚存 时间: 2016-11-27 15:54
点亮比较简单,如果循环点亮可以用while循环语句
作者: daifei123 时间: 2016-11-27 21:21
用打火机怎么样?
作者: 3121333 时间: 2016-11-27 21:32
简单的
作者: ANSELWX 时间: 2016-11-27 22:18
这个挺容易的
作者: benq1 时间: 2016-12-1 14:33
那用这样的就太复杂了。
作者: 浮躁的苹果 时间: 2016-12-1 16:00
如此压缩包
-
-
流水灯.rar
62.3 KB, 下载次数: 4
作者: 兮丶哈 时间: 2016-12-1 20:36
用位操作就行
作者: 6549649 时间: 2016-12-1 20:50
去微软的确认
作者: CZM199404 时间: 2016-12-2 11:09
原理图看懂就会
作者: feichan61 时间: 2016-12-2 17:15
这个你要看是共阴极还是共阳极啊,不能说一味的都是给0
作者: zql111000 时间: 2016-12-2 20:53
编写的不够简结,
作者: sadsad 时间: 2016-12-2 21:37
初学者我是
作者: HH2013.08.13 时间: 2016-12-3 17:22
把对应的P1口置0就可以了
作者: whq7059890whq 时间: 2016-12-3 17:38
也在寻找
作者: 初夏微凉 时间: 2016-12-7 18:00
用查表指令MOVC,在表中设置你想亮的方式,读表输出就可以
作者: 简单点爱情 时间: 2016-12-7 20:18
电路图很简单 就是 电阻和灯 串联在单片机的引脚上 程序在用 左右移函数
作者: 初夏微凉 时间: 2016-12-7 20:35
查表,根据查到的值输出
作者: 初夏微凉 时间: 2016-12-7 20:36
查表,根据查到的值输出
作者: 1115475664 时间: 2016-12-7 22:28
加我QQ1115475664发你视频
作者: yzg110 时间: 2016-12-7 22:43
就是规律地控制引脚点位的高低
作者: yzg110 时间: 2016-12-8 09:48
就是规律地控制引脚点位的高低
作者: yzg110 时间: 2016-12-8 09:48
挺简单的,我刚做
作者: chenguangying 时间: 2016-12-8 10:51
在网上都有很多啊
作者: myjlgsl 时间: 2016-12-8 11:20
感谢lz,好东西
作者: 候俊的论坛 时间: 2016-12-8 13:18
怎么上图/
作者: 15177749020 时间: 2016-12-8 13:26
学习楼上
作者: mr734316803 时间: 2016-12-8 14:27
第一个电路图可以
作者: yzg110 时间: 2016-12-8 15:25
自己查资料 效果好
作者: a89336430 时间: 2016-12-8 16:39
这是基础 了 先学c语言
作者: n199202 时间: 2016-12-9 19:02
网上搜资料啊,很简单的
作者: 13032808919 时间: 2016-12-9 19:17
简单的流水灯程序
作者: 13032808919 时间: 2016-12-9 19:17
#include <reg52.h> #define uint unsigned int #define uchar unsigned char void main(void) { uint count, num=0; P0 = 0xfe; while(1) { count++; if (count>=50000) count = 0; if (count==3) if (num < 7) { P0=P0 << 1; P0=P0 | 0x01; num++; } else if (num < 14) { P0=P0 >> 1; P0=P0 | 0x80; num++; } if (num >= 14) num = 0; } }
作者: 13032808919 时间: 2016-12-9 19:18
#include <reg52.h> #define uint unsigned int #define uchar unsigned char void main(void) { uint count, num=0; P0 = 0xfe; while(1) { count++; if (count>=50000) count = 0; if (count==3) if (num < 7) { P0=P0 << 1; P0=P0 | 0x01; num++; } else if (num < 14) { P0=P0 >> 1; P0=P0 | 0x80; num++; } if (num >= 14) num = 0; } }
作者: 153986166 时间: 2016-12-10 21:35
多看视频多泡论坛,学长的程序和教程可以参考,但是要学会,看会,实践会。才是真理
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |