- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Cepark AVR M16 第六课 LED流水灯(AVR单片机培训).pdf
Cepark AVR 单片机进阶篇 基本输出:LED 流水灯 本文作者:Cepark 更新时间:2010/07/05 作者博客: 本文档由电子园(CEPARK.COM )提供给广大电子工程师免费下载学习研究使用。在未获电子园书面授权之前, 不得将 资料全部或部分用于商业用途,包括但不限于期刊、杂志、书籍等。转载 资料请注明作者及来源。 基本输邮:LED 流水灯] 子园WWW.CEPARK.COM 第六课LED 流水灯 上一课我们介绍了,如何实现在对IO 口的按位输出0.现在我们再说下按位输出1;这两个是在AVR 的学习操作中很基 的,大家要很好的掌握。 前提是DDRB = 0xFF; PORTB |= ( 1 1); 这里是按位PB1 口输出1; PORB = ~( 1 1);这里是按位PB1 口输出0; 这样可能还是不太直观,上面的可以改写为: PORTB |= ( 1 PB 1); 这里是按位PB1 口输出1; PORTB = ~( 1PB 1);这里是按位PB1 口输出0 ; 这里的PB1 为是1.这个包含在我们的头文件IO.H 中,具体的问题,大家可以查看WinAVR- avr\include\avr 目录下的iom16.h. 本课我们将用移位,查表两种方式实现单片机的流水灯。 首先我们来看移位方式,如下图file4 : unsigned dat;这是定义一个无符号单字节变量,把它放在程序顶,称为全局变量,这样,在每个子函 数里都可以对它进行引用、修改,在整个程序执行中都占用固定的RAM 空间。相对应的就是局部变量, 比如我们在main 函数内部定义的变量就是局部变量,它们只有在函数执行前才生 ,结束后就消失了, 占用的RAM 空间会被释放,不能被其它函数引用,在C 里面,我们一般建议能用局部变量就不用全局变 量,这是因为单片机的RAM 空间有限。 if(!dat)dat= 1;从图中我们可以知道符号 !”是逻辑非,即如果dat 是0,那么!dat 之后,结果就是1 (真),如果dat 是非0 (注意,只要是非0,不管是1、2 、3 戓什么值),那么!dat 结果就是0 (假),逻 -专业电子技术交流社区 电子工程师网上家园- 电子园 第 2 页 基本输邮:LED 流水灯] 子园WWW.CEPARK.COM 辑判断是很常用的. if(表达式1)表达式2; 是一条判断语句,根据表达式1 运算结果来判断是否执行表达式2 ,只有在结果为1 (真)的时候才 会执行。 PORTB=~dat;是将dat 值按位取反后送到P0 口,~”是按位取反运算符,比如第一次执行时dat 的值 为1 即二进制的0000 0001 ,那么按位取反后就是1111 1110,然后再送到P0 口,这样,我们就可以点亮 P0 口上最低位的LED 了。 dat= 1; 把dat 的值左移1 位, ”是左移,位数可以自己喜欢啦,不一定1 位,比如dat=2 就是 左移2 位。这个式子完整的表达应该是 dat=dat 1; 这样看比较清楚,先把dat 左移1 位再赋值给dat 身。在C 里常有这种写法,称为复合赋值运算, 含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量,比如dat-= 1; 和式子 dat=dat- 1;是一致 的,其它一些运算也可以写成这种方式,这里不再详细说明,以后用到就会明白。 这里的移位操作跟汇编不同,移位后,原来的位置是用0 补充的,不象是汇编里的循环移位。比如 dat 如果是1111 1111 那么执行dat= 1;后,结果就变成1111 1110。大家想想,如果左移8 位后结果是什 么? 结果是0,呵呵,所以我们在开始放了一句判断if,如果dat 是0 就将dat 写成1,这样,这个跑马
文档评论(0)