我也玩单片机:流水灯
一、点亮一个P1.0口的发光管
1、源代码
2 #define uint unsigned int //宏定义
3 #define uchar unsigned char //宏定义
4 sbit led=P1^0; /*定义P1.0*/
5 sbit led1=P1^1;/*定义P1.1*/
6
7 main()
8 {
9 uint a;
10 while(1)
11 { a=50000;
12 led=0; /*点亮发光管*/
13 while(a--);
14 a=50000;
15 led=1;
16 while(a--);
17 }
18 }
2、分析
1、位操作:置位
sbit的作用:
在C中sbit是“定义位变量”的说明性语句,并不产生指令代码;而在汇编中setb是一条真正的“指令”(意思就是set bit),在汇编中与C中sbit相对应的说明性语句是bit。下面是2种语言中等价的语句:
C语言 | 汇编 |
sbit led1=p1^0; | led1 bit P1.0 |
led1=1; | setb led1 |
led1=0; | clr led1 |
2、延时
利用循环多次运行指令的延时
怎么计算延时时间呢?
while(a--);这样的延时方式准确吗?
要自动化生成延时代码?试一下单片机小精灵吧。http://jy.newhua.com/soft/86816.htm#down
二、从左到右的流水灯
1、源代码AT89C51
2 #include<intrins.h>
3 #include<math.h>
4 #include<stdio.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 void delay(uint z)
8 {
9 uint x,y;
10 for(x=z;x>0;x--)
11 for(y=110;y>0;y--);
12 }
13 void main()
14 {
15 uchar aa;
16 P0=0xfc;//低电平亮
17 while(1)
18 {
19 delay(500);
20 aa=P0;
21 //aa=_crol_(aa,1);
22 aa>>=1;
23 P0=aa;
24 }
25 }
2、分析
1、延时
这里的延时函数使用了双重循环:可以凑成整数单位,使输入参数更直观。
2、位移动
aa=_crol_(aa,1);
这是什么函数?其实,效果跟aa>>=1;是一样的。
INTRINS.H:内部函数
_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作8051 NOP 指令
_testbit_ 测试并清零位8051 JBC 指令
详解:
函数名: _crol_,_irol_,_lrol_
原 型:
unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
功 能:_crol_,_irol_,_lrol_以位形式将val 左移n 位,该函数与8051“RLA”指令。
参考:
C51中的INTRINS.H:内部函数 -- zalezou's Blog
三、左右来回的流水灯
电路图跟“二、从左到右的流水灯”一样
源代码
2 {
3 uint led,i;
4 led=0x01;
5 while (1)
6 {
7 for(i=0;i<8;i++)
8 {
9 P2=led;
10 delay(500);
11 led<<=1;
12 }
13 for(i=8;i>0;i--)
14 {
15 P2=led;
16 delay(500);
17 led>>=1;
18 }
19 }
20 }
转载于:https://www.cnblogs.com/Leon6Dw57/archive/2010/01/06/1640049.html
我也玩单片机:流水灯相关推荐
- 51单片机流水灯制作
文章目录 51单片机流水灯制作 初试与复试 初试 复试 制作 分工 制作之硬件 制作之软件 总结 51单片机流水灯制作 我不得不承认自己的毅力实在是太差了,原先准备一星期写一篇博客的目标一致没有实现, ...
- 51单片机流水灯现象1
**` 51单片机流水灯程序 `** 初学者小白,分享上课时写的小程序和普中科技程序,感兴趣的可以瞧瞧. 程序如有相同冒犯了. /*********************************** ...
- 单片机流水灯三种实现
单片机流水灯的三种实现方式(由上至下,再重下到上) 原理图 一般使用单片机的P1口 输出,不需要加上拉电阻: 由原理图可以看出这里采用低电平输出. 一.采用数组方式进行字节定义,最好理解的方式 #in ...
- c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...
- AT89C51单片机流水灯c语言程序及详解(扫盲教程)
AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...
- 89c52流水灯汇编语言,89c52单片机流水灯汇编程序
8路流水灯汇编语言程序的写法 汇编语言程序如下: ;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下: ORG 0000H MOV ...
- 基于STM32单片机流水灯仿真与程序设计
STM32单片机流水灯仿真与程序设计 摘要 本次程序设计和仿真是基于Proteus和keil的环境对STM32F103系列单片机进行流水灯设计,通过配置STM32的GPIO工作模式,实现LED的点亮和 ...
- 单片机流水灯串口控制流水灯
单片机流水灯串口控制的功能要求[从PC通过串口发送字符('R','L,'S),分别控制流水灯向右流动.向左流动.停止]: (1)编写完整的C语言程序实现功能要求,采用循环轮询结构: 答:循环轮 ...
- 80c51流水灯程序汇编语言,单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)...
描述 单片机流水灯汇编语言源代码大全(一) 单片机AT89C51的P1口接8个发光二极管,让这8个发光二极管能够双灯左移之后再双灯右移,形成霹雳灯的效果,如此循环5次后全灭,延时0.5S.灯右移,形成 ...
- 蓝桥杯STC15单片机流水灯
目录 LED原理图 单片机工作的基本时序 机器周期和指令周期 修改编码格式-支持中文 15单片机在线仿真 单片机型号说明:IAP15F2K61S2 新建工程时单片机型号选择STC15F2K60S2 单 ...
最新文章
- html语言制作留言条,利用DIV+CSS制作右下角弹出留言板
- Android 之小技巧
- macos spotlight can not search app
- POJ 2259 team queue团队排队问题
- 生成纯字母随机编号的示例(大小写混合).sql
- 1002.ubuntu系统级BUG-/dev/ttyUSB0
- SQL知识点脑图(一张图总结SQL)
- Chrome FeHelper 插件下载地址
- mysql获取字符串长度函数
- 手把手教你封装属于自己的Windows7安装镜像
- Linux_加密和安全详细介绍
- 饥饿的小易(java)
- 窥见数字未来“天机”,IBM正式发布2019十大行业洞察
- openlayers动态添加自定义div图层 具有筛选功能 和浮窗
- Graphics2D 详细应用秘籍
- 傅立叶级数和傅立叶变换是什么关系?
- 一文读懂服务式办公室、共享办公室、联合办公空间、开放式工位的关系
- python实现数据去重_Python实现的txt文件去重功能示例
- 研发人员绩效考核案例
- osm地图服务器搭建(二)