按“”入学编号”数字顺序剑灵点亮石灯顺序p1口的8个led灯

单片机C语言程序-依次点亮八个LED灯
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
单片机C语言程序-依次点亮八个LED灯
& 电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?
下面是c语言程序源码
#include &reg51.h&
void delay100ms(); & //如果函数是在主函数后面定义,那么一定要在主函数前面声明 & & & & & & & & & & & & & & & & & & & &&
void main()
delay100ms();
void delay100ms(void)//
unsigned char a,b,c;
for(c=19;c&0;c--)
for(b=20;b&0;b--)
for(a=230;a&0;a--);
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved114网址导航单片机学习笔记1--LED流水灯(跑马灯)
开始记一下之前的一些学习经历,不断更新。其中大多数程序和代码都是取材于网络,然后我个人在经过一些修改和实验的总结。基本做到由浅入深,从0开始。
由于我也是初学,刚刚入门,所以下面写的可能比较初级,而且难免有很多错误,看到的人希望能指出来。谢谢。另外如果转载的话希望能够加上出处。希望大家能够多交流,有问题只需要留言或者加我QQ.
首先先说下我用的学习硬件平台,是mini80E这个板子主控是STC89C54RD+,很多年前买的,一直没有下功夫好好学。现在拾起来从头开始。
首先,我们要做的是让一个总线上的LED灯按照顺序从左到右一个一个点亮,也就是跑马灯。
这块板子上LED1-LED8这8个灯分别接在单片机的P1.0-P1.78个IO口上。使用共阳极接法,也就是当某一位IO的电平为低的时候,这一位的LED点亮,所以我们的目的就变成了让这8个IO轮流变低。
首先看到题目,我们会想到不止一种方法实现,下面分别说明。
第一种,也就是最简单的,大家都能够想到的就是让每一个IO变低,再变高,下一位变低,再变高。完全符合思维的发展。
&(可以学习单片机的IO位操作)
& & 代码流程为
LED1=P1^0;//给位命名,声明特殊功能寄存器,后面直接写LED1-7就可以操作P1^0-P1^7
& & sbit LED2=P1^1;
& & sbit LED8=P1.7;
& &主函数里&
& 只需要写
& & LED1=0;//1灯亮
& & delay();//延时
& & LED1=1;//1灯灭
& & delay();//延时
&LED2=0;//2灯亮
& delay();//延时
& LED2=1;//2灯灭
& delay();//延时
&第二种,总线的操作方法,因为这8个LED是全部接在P1口这个总线上的,所以我们可以直接操作P1口来实现。(学习单片机总线操作)
& & 代码 直接在主程序里
& & P1=0xFE;
&//开第一个灯,0xFE 是16进制,换算2进制为
,第一位是0,第一个LED亮
& & delay500ms(); //延时
&&P1=0xFF;//全部灯灭
& & delay500ms();
& & P1=0xFD;
&//第二个灯亮,下面同理。 &
& & delay500ms();
& & P1=0xFF; &
& & delay500ms();
& & P1=0xFB;
& & delay500ms();
第三种,查表法,数组的运用。(学习C语言数组使用)
& 首先定义数组
&&uchar code
table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//分别代表8个LED
& 然后在主函数里
void main(void)
& & num=0;//赋初值
& if(num&8) //条件语句
& P1=table[num]; //查表,使用数组
& &delay500ms();
& & num=0;
第四种,循环和移位。(学习循环,移位)
uchar num,shu,i; //定义变量
& num=0x01; //赋初值
& for(i=8;i&0;i--)
&//for循环,循环8次
&//按位取反,如num=0x01的话shu为
&P1= &//将shu赋值给P1口
&num=num&&1;
&//将num左移一位,如num=0x01将变成0x02,取反就是0xfd 以此类推
&delay500ms();
& 第五种,循环移位 ,库函数。
&(了解库函数循环移位)
需要调用头文件&#include&intrins.h&&
然后在主函数里&
& &while(1)
& & while(1)
&num=_crol_(num,1);
//循环左移的函数,_crol_表示左移,_cror_表示右移。num表示要移动的变
//量,1表示移动的位数。如num=循环左移1位就是
&delay500ms();
综合上面应该是最后两种使用最多,也最简便。当然前面几种是为了学些某些使用的入门经过。
也必不可少。
& & ----by
生如夏花&huarana
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。#include &reg52.h& // 引用52包文件 可以理解为命名空间
sbit P1_0 = P1^0; &&// 定义P1管脚0
void main()&&&&&&&&&&&& // 主程序 C语言所必需要有的{P1_0 = 0; & & & & & & &// 点亮P1第0管脚连接的LED}
===============以下非程序代码===================
上面的程序,首先引用reg52.h,这里有对操作单片机相关数据的封装,方便用户使用
接着,用P1_0这个sbit类型的变量,引用P1口的第1个引脚(P1^0)
接着,主程序开始
将P1口的第1个引脚置为低电平(亮)
在reg52.h上右键菜单(Keil中)open document&reg52.h&可以打开reg52单元,发现P1的定义:sfr P1&= 0x90;什么意思呢?
sfr 是用于定义特殊寄存器(Special Function Register)的关键字,是单片计算机中的一组特殊的临时存储区域,用于动态存放计算机运行过程的一些状态信息、并依此做相应的控制。51系列单片机中,通常每个寄存器也就一个字节,这个字节是P1(通用寄存器1)P1有8个位,但0x91~0x97与P1毫无关系,同理其他3个寄存器P0, P2, P3也是这个道理。MCS-51单片机就设有18个专用寄存器,P0-P3端口,定时/计数器T0、T1,TMOD、TCON、PCON、SCON 、PSW、IE、A、B、IP等等。SFR越多,编和控制功能越强、越灵活,但需要硬资源,所以系统设计时会根据需要来确定。
sbit(Set Bit)与sfr用法类似,只是sbit是位操作,用于将某个sfr中具体位赋值给一个变量,这样后面程序就可用通过该变量为该位清0或置1。
1.sfr和sbit的含意,特殊功能寄存器的含意
2.如何用位控制引脚
阅读(...) 评论()

我要回帖

更多关于 入学信息 产证编号 的文章

 

随机推荐