单片机-流水灯的程序 PPT课件
(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。
2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。
3.8 个发光管来回流动,第个管亮100ms 。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
单片机控制流水灯 ppt课件

思考:前面的实验我们都是直接用一个P1 口的,那么能不能对P1口的某一个引脚来 操作呢?
任务3:
单片机应用技术
流水灯----单片机内部结构
精品资料
单片机应用技术
• 你怎么称呼老师? • 如果老师最后没有总结一节课的重点的难点,你
是否会认为老师的教学方法需要改进? • 你所经历的课堂,是讲座式还是讨论式? • 教师的教鞭 • “不怕太阳晒,也不怕那风雨狂,只怕先生骂我
单片机应用技术
这样看来程序是不是变得非常的简单了呢?但程序的可读性是不是 很差啊?能不能把P1变一下样我们来定义一个容易理解的变量呢?当然 可以了。
我们可以用C语言中define 的定义。 具体格式如下: #define 变量 预定义名 功能:用预定义名来代替前面的变量 如:#define P1 led 这样以后在程序中出现的led都代表P1口。将上面的程序修改如下: #include “reg51.h” #define P1 LED void delay() {
unsigned int i; for(i=0;i<10000;i++) ; }
void main()
{
for(;;)
{ L0 = 0;
delay(); L0 = 1; L1 = 0;
delay(); L1 = 1; L2 = 0;
delay(); L2 = 1; L3 = 0;
delay(); L3 = 1; L4 = 0;
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
10 11 12 13 14 15 16 17
4K
1
40
2
39
3
38
单片机控制技术项目训练教程任务三 键控流水灯控器制作-PPT课件

2
任务分析:
前面一个任务我们已经完成了LED流 水灯的制作,本任务与前一任务相比仅是 增加了按键的控制,即点按一次按键K后 立即执行“流水灯程序”。“点按按键一 次”通常的理解是先按下按键,然后又放 开,所以编程时,首先要判断按键是否真 正的按下,若按下,就等待按键释放。释 放后,这次按键的动作就完成了。
}
程序知识点:
(1)if语句的使用
if(表达式) {语句}
if(表达式) {语句1}
else {语句2}
if(表达式1) {语句1} else if(表达式2 ) {语句2}
...... else {语句n}
(2)带参数的延时程序使用
//无参数延时程序 void delay() {
unsigned int x; for(x=30000;x>0;x--); }
P1口赋值数据 计算表格
次序 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1值 1 0 0 0 1 1 1 1 1 0x1F 2 1 0 0 0 1 1 1 1 0x8F 3 1 1 0 0 0 1 1 1 0xC7 4 1 1 1 0 0 0 1 1 0xE3 5 1 1 1 1 0 0 0 1 0xF1 6 1 1 1 1 1 0 0 0 0xF8 7 0 1 1 1 1 1 0 0 0x7C 8 0 0 1 1 1 1 1 0 0x3E
键控LED流水灯硬件模块接线图(YL-236单片机实训装置)
4
软件编程
主程序流程图:
参考程序:
{ u n sig n ed ch ar i; //定 义 无 符 号 字 符 型 变 量 i P1= 0xff; //开 机 时 8个 LED 全 灭 w h ile(1 )//主 程 序 循 环 { K = 1 ;//把 按 键 管 脚 拉 高 if(K = = 0 )//首 次 判 断 按 键 是 否 按 下 { d elay _m s(1 0 0 0 ); //调 用 带 参 数 的 延 时 子 函 数 消 除 按 键 抖 动 if(K = = 0 )//再 次 判 断 按 键 是 否 按 下 { w h ile(K = = 0 );//等 待 按 键 释 放 w h ile(1 )//流 水 灯 的 循 环 { fo r(i= 0 ;i< 8 ;i+ + )//循 环 8 次 { P 1 = D M [i]; //查 询 在 D M 数 组 中 取 出 对 应 值 d elay _m s(3 0 0 0 0 ); //调 用 带 参 数 的 延 时 子 函 数 } } } } }
简单的单片机的流水灯程序

;----- 主程序开始-----START:CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY;调用延时子程序SETB P1.0;P1.0输出高电平,使LED1熄灭CLR P1.1;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETB P1.1;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3;P1.3输出低电平,使LED4点亮ACALL DELAY;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR P1.4;P1.4输出低电平,使LED5点亮ACALL DELAY;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6;P1.6输出低电平,使LED7点亮ACALL DELAY;调用延时子程序SETB P1.6;P1.6输出高电平,使LED7熄灭CLR P1.7;P1.7输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETB P1.7;P1.7输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMP START;8个LED流了一遍后返回到标号START处再循环;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束。
(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。
2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。
3.8 个发光管来回流动,第个管亮100ms。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}2#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p 仁P1A0;uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a;delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main(){uchar a,i;while(1)a=0xfe;for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);}}}4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a){uint x,y;for(x=a;x>0;x--) for(y=110;y>0;y--);}void main(){uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main(){uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a;delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa;delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300);a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd;delay(300);P1=0xdb;delay(300);P1=0xe7;delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
单片机控制LED灯点亮(C语言)PPT课件

▪ 以下各数不是合法的十六进制整常数: 5A ( 无前缀0X) 0X3H (含有非十六进制数码)
.
26
各种进位制的对应关系
十进制 二进制
0
0
1
1
2
10
3
11
4
100
单片机控制 led灯点亮
.
1
主要内容
▪ 一、点亮板子上的第一个灯D0 ▪ 二、点亮板子上的D0、D2、D4、
D6灯,与D1、D3、D5、D7灯交替 闪烁 ▪ 三、流水灯:从D0---D7依次点亮
.
2
▪ 一、点亮板子上的第一个灯D0
1)目标 了解单片机的基本设计思路和编
程方法,和单片机的最小系统。 2)分析
片,文件的扩展名为.HEX,默认情况下该项
未被选中,如果要写芯片做硬件实验,就必
须选中该项。其余选项均取默认值,不做任
何修改。
.
17
6.编译项目并创建HEX文件
▪ 可以通过工具栏中的图标直接进行。从左到 右的图标分别是:编译、编译连接、全部重 建、停止编译和对工程进行设置。
.
18
▪ 对源程序编写之后编译,最终要得到结果, 提示0个错误,0个警告。同时还可看到,该 程序的内部RAM的使用量(data=8.0),外 部RAM的使用量(xdata=0),代码量( code=18)等一些信息。
unsigned int unsigned short int unsigned long int
float double char unsigned char
流水灯程序设计与调试.ppt

10
重点: 1、学习P1口既作为输入,又作为输出的使用方法。 2、学习数据输入、输出程序的设计方法。
11
二、任务分析
1、硬件分析
❖ P1口为准双向I/O接口,输出单条指令完成,输入时应当先 向对应的端口锁存器写入1,然后读入数据。
12
2、软件说明
➢ 有两个操作数,如MOV A,30H指令,操作数之间以逗号 相隔;
➢ 有3个操作数,如 CJNE A,#00H,10H指令。
❖ 注释:对指令的解释说明,用以提高程序的可读性,注释前 必须加分号,注释换行时行前也要加分号。
步骤4:现象无误,请求教师检查、评价。 步骤5:编制项目报告并提交。
18
➢分支程序的基本形式 分支程序有三种基本形式,如图2-1所示。 分支程序的设计要点如下:
❖先建立可供条件转移指令测试的条件。 ❖选用合适的条件转移指令。 ❖在转移的目的地址处设定标号。
19
条件满足? Y
A
(a)单分支
N
条件满足?
Single Chip Microcomputer
情
境
主要内容
1
➢流水灯程序设计与调试
彩
➢转弯灯程序设计与调试
灯
控
➢交通灯程序设计与调试
制
器
1
1.3.1 流水灯程序设计与调试
一、任务说明 1、要求 ❖ P1口作为输出口。P1.0至P1.7接8个发光二极管。要求编写
程序实现如下功能:8个发光二极管依次亮灭并循环,延时 0.1秒(已知fosc=12MHz)。 2、重点 1、学习P1口作为输出口的使用方法。 2、学习延时程序的设计方法。
ANL A,Rn ; A (A)∧Rn ANL A,@Ri ; A (A)∧(Ri) ANL A,#data ; A (A)∧#data ANL direct,A ;(direct) (direct)∧(A) ANL direct,#data ; (direct)(direct)∧#data 注意: 以上指令结果通常影响程序状态字寄存器PSW的P标志。 存储单元指定位清0的做法:按照需清0的位置填0,需保留的位置填1的原则构建 清0常数,然后利用ANL指令实现运算。 相近的指令:逻辑或指令ORL,逻辑异或指令XRL,清0指令CLR,取反指令CPL。 逻辑或可实现存储单元指定位置1,逻辑异或可实现存储单元指定位取反。
单片机-流水灯的程序ppt精选课件

1110
E
1011
B
1111
F
例如:二进制数
1111 1110 转换为十六进制
十六进制数为 0x f e
ppt精选版
9
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
编程思路:
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
利用单片机实现流水灯
杨美丽
ppt精选版
1
方法一:利用位定义实现流水灯(8位二极管循环点亮)
相关知识
一、sbit 当我们在C语言中直接给P2口时,编译器并不识
别,而且这也是种不合法的写法,所以我们要让P2 与编译器建立一定的联系,于是就采用了KEIL C 中的关键字sbit。
sbit是一个特殊功能寄存器的位变量。bit和sbit
b)循环右移
最低位移入最高位,其它位依次向右移一位,C语言 中没有专门的指令,通过移位指令与简单的逻辑运算可 以实现循环右移,或专门利用C51库中自带函数-cror-实 现
ppt精选版
14
方法三:利用按位左移实现流水灯
#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char uint i,j; uchar Led;
程序分析:
ppt精选版
10
#include<reg51.h> void delayms(unsigned char xms);
void main() {while(1) { P2=0xfe; delayms(120); P2=0xfc; delayms(120); P2=0xf8; delayms(120); P2=0xf0; delayms(120); P2=0xe0;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、子函数的调用。
1)不带参数函数的写法及调用
在C语言中当一些语句不止一次使用到,而且语句内容相
同,我们就可以把这样的语句写成一个不带参数的子函
数,当在主函数中需要这些语句时,直接调用这个语句
就可以:
其中void表示这
例如:延时语句
个函数执行完后
for(i=0;i<xms;i++)
不返回任何数据。
程序分析:
#include <reg51.h> #include <intrins.h> int i,j; char Led;
void main() { Led = 0xfe;
while(1) { P2 = Led;
for(i=1;i<200;i++) for(j=1;j<200;j++); Led = _crol_(Led,1); if(P2 == 0x00 ) {Led = 0xfe; }
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() {while(1) { P2=0xfe; delayms(120); P2=0xfc; delayms(120); P2=0xf8; delayms(120); P2=0xf0; delayms(120); P2=0xe0;
delayms(120); P2=0xc0; delayms(120); P2=0x80; delayms(120); P2=0; delayms(120);
void main() { while(1) {
led1=0; delay(120);
led2=0; delay(120);
led3=0; delay(120);
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0; delay(120);
delay(120); led1=1; led2=1; led3=1; led4=1; led5=1; led6=1; led7=1; led8=1; }
}
void delay(unsigned char x)
{ char i;char j; for(i=0;i<x;i++) for(j=0;数写在主函数的前面时无需声明,因为在写函数 体的时候已近相当于声明了函数本身。通俗的讲,声明子 函数的目的是为了编译器在编译主程序的时候,当它遇到 子函数知道有这样的一个函数存在,并且知道他的内部情 况,以便为其分配空间。
方法一:利用位定义实现流水灯(8位二极管循环点亮)
编程思路:
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
相关知识
一、C51中库函数-crol-的应用
“_crol_”是一个函数名,是51单片机自带的一个内部函数 ,包含在C51头文件“intrins.h”中。也就是说如果在程序中要 用到这个函数,那就必须在程序的开头处包含这个文件。
再来看函数特性:
unsigned char _crol_( unsigned char a, unsigned char b )
}}
void delayms(unsigned char xms) { char i;
char j; for(i=0;i<xms;i++) for(j=0;j<xms;j++);
}
方法三:利用移位操作实现流水灯(8位二极管循环点亮)
一、按位左移
相关知识
按位左移是将一个运算量的各位依次左移若干位, 低位补0,高位舍弃不要。
unsigned char:这种函数叫做有返回值,带参数的函数。也就是 说程序执行完这个函数后,通过它内部的某些运算而得出一 个新值,该函数最终将新值返回给调用它的语句。
a= _crol_(a,1);他的意思就是讲a循环向左移动一位。
利用51单片机函数-crol-实现流水灯 编程思路:
a)在程序的开头加函数_crol_所在的头文#include<intrins.h> b)点亮第一盏灯,执行循环左移,使函数自己实现依次点亮 。
for(i=0;i<xms;i++) for(j=0;j<xms;j++); } 在这个函数中我们发现其括号中多了一个 “unsigned char xms”.这就是这个函数所带的参数,其中xms是一个unsigned char 的变量,又叫这个函数的形参,在调用此函数时我们用 一个具体真是的数据来代替此形参,这个真实数据被称为实 参,形参被实参代替之后,在子函数中和形参名相同的数据 都将被实参代替。
利用单片机实现流水灯
杨美丽
方法一:利用位定义实现流水灯(8位二极管循环点亮)
相关知识
一、sbit 当我们在C语言中直接给P2口时,编译器并不
识别,而且这也是种不合法的写法,所以我们要 让P2与编译器建立一定的联系,于是就采用了 KEIL C中的关键字sbit。
sbit是一个特殊功能寄存器的位变量。bit和sbit 都是C51扩展的变量类型,典型的应用就是我们前 面用的sbit led=P2^0;他的意思就是定义led为P2口 的第一位,和char之类的差不多,不同点就是char 是8位,而sbit只有一位,而且它只有两种值(1或 者0)。 在编程中 我们一旦用sbit定义了一个变量 ,那么这个变量就有了确定的地址。如你使用了 char,也就限制了它的使用值一样。
b)循环右移 最低位移入最高位,其它位依次向右移一位,C语言
中没有专门的指令,通过移位指令与简单的逻辑运算 可以实现循环右移,或专门利用C51库中自带函数-cror实现
方法三:利用按位左移实现流水灯
#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char uint i,j; uchar Led;
程序分析:
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
}
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识
二进制和十六进制之间的相互转换
二进制
十六进制 二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制 二进制
十六进制
1000
8
1100
C
1001
9
1101
D
1010
A
1110
E
1011
void main() {
Led = 0xfe; while(1) { P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++); Led = Led << 1; if(P2 == 0x00 ) {Led = 0xfe; } } }
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
for(j=0;j<xms;j++);
我们可以把他的调用语句写成:
void delayms()
()内无任何东西,
{ char i;char j;
所以这是个无参
for(i=0;i<100;i++)
数的函数。
for(j=0;j<100;j++);
Delayms是函数名。
}
2)带参数函数的写法及调用
void delayms(unsigned char xms) { char i;char j;
B
1111
F
例如:二进制数
1111 1110 转换为十六进制
十六进制数为 0x f e
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
编程思路:
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
程序分析:
#include<reg51.h> void delayms(unsigned char xms);
} }
如果a是带符号的负数,a=-16,存放在机器中的补码为 1111 0000,则a=a>>2,值为- 4。
右移前 1111 0000
右移后 1111 1100
三、循环移动
a)循环左移 最高位移入最低位,其它依次向左移动一位。C语言
中 没有专门的指令,通过移位指令和简单逻辑运算来实 现循环左移,或直接利用C51库中自带的函数-crol-实现。
调用注意事项:
子函数可以写下主函数的前面或是后面,但是不可以 写在主函数的里面。