- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机-流水灯的程序
利用单片机实现流水灯 杨美丽 * * 方法一:利用位定义实现流水灯(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,也就限制了它的使用值一样。 二、子函数的调用。 1)不带参数函数的写法及调用 在C语言中当一些语句不止一次使用到,而且语句内容相同,我们就可以把这样的语句写成一个不带参数的子函数,当在主函数中需要这些语句时,直接调用这个语句就可以: 例如:延时语句 for(i=0;ixms;i++) for(j=0;jxms;j++); 我们可以把他的调用语句写成: void delayms() { char i;char j; for(i=0;i100;i++) for(j=0;j100;j++); } 其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。 2)带参数函数的写法及调用 void delayms(unsigned char xms) { char i;char j; for(i=0;ixms;i++) for(j=0;jxms;j++); } 在这个函数中我们发现其括号中多了一个 “unsigned char xms”.这就是这个函数所带的参数,其中xms是一个unsigned char 的变量,又叫这个函数的形参,在调用此函数时我们用一个具体真是的数据来代替此形参,这个真实数据被称为实参,形参被实参代替之后,在子函数中和形参名相同的数据都将被实参代替。 调用注意事项: 子函数可以写下主函数的前面或是后面,但是不可以写在主函数的里面。 当写在后面时,必须在主函数之前申明子函数,声明方法为:将返回特性,函数名及后面的小括号完全复制,若是无参数,则小括号内位空,若有参数,则需要在小括号内,依次写上参数类型,只写参数,无需写参数,参数类型之间用逗号隔开,最后在小括号的后面加上冯号。 当子函数写在主函数的前面时无需声明,因为在写函数体的时候已近相当于声明了函数本身。通俗的讲,声明子函数的目的是为了编译器在编译主程序的时候,当它遇到子函数知道有这样的一个函数存在,并且知道他的内部情况,以便为其分配空间。 方法一:利用位定义实现流水灯(8位二极管循环点亮) 编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。 程序分析: #includereg51.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); 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); led8=0; 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; fo
文档评论(0)