单片机-流水灯的程序 ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void delayms(unsigned char xms) { char i;char j;
for(i=0;i<xms;i++) for(j=0;j<xms;j++); } 在这个函数中我们发现其括号中多了一个 “unsigned char xms”.这就是这个函数所带的参数,其中xms是一个unsigned char 的变量,又叫这个函数的形参,在调用此函数时我们用 一个具体真是的数据来代替此形参,这个真实数据被称为实 参,形参被实参代替之后,在子函数中和形参名相同的数据 都将被实参代替。
}
delay(120);
led5=0 ; void delay(unsigned char
delay(120);
x)
led6=0;
{ char i;char j;
delay(120);
for(i=0;i<x;i++)
led7=0;
for(j=0;j<x;j++);
delay(120);
}
ppt课件
7
char,也就限制了它的使用值一pp样t课件。
2
二、子函数的调用。
1)不带参数函数的写法及调用
在C语言中当一些语句不止一次使用到,而且语句内容相
同,我们就可以把这样的语句写成一个不带参数的子函
数,当在主函数中需要这些语句时,直接调用这个语句
就可以:
其中void表示这
例如:延时语句
个函数执行完后
for(i=0;i<xms;i++)
当子函数写在主函数的前面时无需声明,因为在写函数 体的时候已近相当于声明了函数本身。通俗的讲,声明子 函数的目的是为了编译器在编译主程序的时候,当它遇到 子函数知道有这样的一个函数存在,并且知道他的内部情 况,以便为其分配空间。
ppt课件
5
方法一:利用位定义实现流水灯(8位二极管循环点亮)
编程思路:
E
1011
B
1111
F
例如:二进制数
1111 1110 转换为十六进制
十六进制数为 0x f e
ppt课件
9
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
编程思路:wenku.baidu.com
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
程序分析:
ppt课件
4
调用注意事项:
子函数可以写下主函数的前面或是后面,但是不可以 写在主函数的里面。
当写在后面时,必须在主函数之前申明子函数,声明方 法为:将返回特性,函数名及后面的小括号完全复制,若 是无参数,则小括号内位空,若有参数,则需要在小括号 内,依次写上参数类型,只写参数,无需写参数,参数类 型之间用逗号隔开,最后在小括号的后面加上冯号。
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;
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
程序分析:
ppt课件
6
#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);
利用单片机实现流水灯
杨美丽
ppt课件
1
方法一:利用位定义实现流水灯(8位二极管循环点亮) 相关知识
一、sbit 当我们在C语言中直接给P2口时,编译器并不
识别,而且这也是种不合法的写法,所以我们要 让P2与编译器建立一定的联系,于是就采用了 KEIL C中的关键字sbit。
sbit是一个特殊功能寄存器的位变量。bit和sbit
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识
二进制和十六进制之间的相互转换
二进制
十六进制 二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
ppt课件
8
二进制
十六进制 二进制
十六进制
1000
8
1100
C
1001
9
1101
D
1010
A
1110
delayms(120); P2=0xc0; delayms(120); P2=0x80; delayms(120); P2=0; delayms(120);
}}
void delayms(unsigned char xms)
{ char i;
char j;
for(i=0;i<xms;i++)
for(j=0;j<xms;j++);
void main()
delay(120);
{
led1=1;
while(1)
led2=1;
{
led3=1;
led1=0;
led4=1;
delay(120);
led5=1;
led2=0;
led6=1;
delay(120);
led7=1;
led3=0;
led8=1;
delay(120);
}
led4=0;
不返回任何数据。
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是函数名。
}
ppt课件
3
2)带参数函数的写法及调用
}
ppt课件
11
方法三:利用移位操作实现流水灯(8位二极管循环点亮)
一、按位左移
相关知识
按位左移是将一个运算量的各位依次左移若干位, 低位补0,高位舍弃不要。
都是C51扩展的变量类型,典型的应用就是我们前
面用的sbit led=P2^0;他的意思就是定义led为P2口
的第一位,和char之类的差不多,不同点就是char
是8位,而sbit只有一位,而且它只有两种值(1或
者0)。 在编程中 我们一旦用sbit定义了一个变量
,那么这个变量就有了确定的地址。如你使用了
for(i=0;i<xms;i++) for(j=0;j<xms;j++); } 在这个函数中我们发现其括号中多了一个 “unsigned char xms”.这就是这个函数所带的参数,其中xms是一个unsigned char 的变量,又叫这个函数的形参,在调用此函数时我们用 一个具体真是的数据来代替此形参,这个真实数据被称为实 参,形参被实参代替之后,在子函数中和形参名相同的数据 都将被实参代替。
}
delay(120);
led5=0 ; void delay(unsigned char
delay(120);
x)
led6=0;
{ char i;char j;
delay(120);
for(i=0;i<x;i++)
led7=0;
for(j=0;j<x;j++);
delay(120);
}
ppt课件
7
char,也就限制了它的使用值一pp样t课件。
2
二、子函数的调用。
1)不带参数函数的写法及调用
在C语言中当一些语句不止一次使用到,而且语句内容相
同,我们就可以把这样的语句写成一个不带参数的子函
数,当在主函数中需要这些语句时,直接调用这个语句
就可以:
其中void表示这
例如:延时语句
个函数执行完后
for(i=0;i<xms;i++)
当子函数写在主函数的前面时无需声明,因为在写函数 体的时候已近相当于声明了函数本身。通俗的讲,声明子 函数的目的是为了编译器在编译主程序的时候,当它遇到 子函数知道有这样的一个函数存在,并且知道他的内部情 况,以便为其分配空间。
ppt课件
5
方法一:利用位定义实现流水灯(8位二极管循环点亮)
编程思路:
E
1011
B
1111
F
例如:二进制数
1111 1110 转换为十六进制
十六进制数为 0x f e
ppt课件
9
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
编程思路:wenku.baidu.com
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
程序分析:
ppt课件
4
调用注意事项:
子函数可以写下主函数的前面或是后面,但是不可以 写在主函数的里面。
当写在后面时,必须在主函数之前申明子函数,声明方 法为:将返回特性,函数名及后面的小括号完全复制,若 是无参数,则小括号内位空,若有参数,则需要在小括号 内,依次写上参数类型,只写参数,无需写参数,参数类 型之间用逗号隔开,最后在小括号的后面加上冯号。
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;
a) 先点亮第一盏灯,延时点亮第二盏 , 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
程序分析:
ppt课件
6
#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);
利用单片机实现流水灯
杨美丽
ppt课件
1
方法一:利用位定义实现流水灯(8位二极管循环点亮) 相关知识
一、sbit 当我们在C语言中直接给P2口时,编译器并不
识别,而且这也是种不合法的写法,所以我们要 让P2与编译器建立一定的联系,于是就采用了 KEIL C中的关键字sbit。
sbit是一个特殊功能寄存器的位变量。bit和sbit
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识
二进制和十六进制之间的相互转换
二进制
十六进制 二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
ppt课件
8
二进制
十六进制 二进制
十六进制
1000
8
1100
C
1001
9
1101
D
1010
A
1110
delayms(120); P2=0xc0; delayms(120); P2=0x80; delayms(120); P2=0; delayms(120);
}}
void delayms(unsigned char xms)
{ char i;
char j;
for(i=0;i<xms;i++)
for(j=0;j<xms;j++);
void main()
delay(120);
{
led1=1;
while(1)
led2=1;
{
led3=1;
led1=0;
led4=1;
delay(120);
led5=1;
led2=0;
led6=1;
delay(120);
led7=1;
led3=0;
led8=1;
delay(120);
}
led4=0;
不返回任何数据。
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是函数名。
}
ppt课件
3
2)带参数函数的写法及调用
}
ppt课件
11
方法三:利用移位操作实现流水灯(8位二极管循环点亮)
一、按位左移
相关知识
按位左移是将一个运算量的各位依次左移若干位, 低位补0,高位舍弃不要。
都是C51扩展的变量类型,典型的应用就是我们前
面用的sbit led=P2^0;他的意思就是定义led为P2口
的第一位,和char之类的差不多,不同点就是char
是8位,而sbit只有一位,而且它只有两种值(1或
者0)。 在编程中 我们一旦用sbit定义了一个变量
,那么这个变量就有了确定的地址。如你使用了