c语言中灯亮1分钟后灭,单片机c语言编控制流水灯.doc

单片机c语言编控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。#include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}

就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把 0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。 假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在P1_1--P1_7上再接7个LED即可。例程如下:#include

sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;

void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。} //i 从0加到125,CPU大概就耗时1毫秒}

void main(void){while(1){P1_0 = 0; Delay(250);P1_0 = 1;

P1_1 = 0; Delay(250);P1_1 = 1;

P1_2 = 0; Delay(250);P1_2 = 1;

P1_3 = 0; Delay(250);P1_3 = 1;

P1_4 = 0; Delay(250);P1_4 = 1;

P1_5 = 0; Delay(250);P1_5 = 1;

P1_6 = 0; Delay(250);P1_6 = 1;

P1_7 = 0;Delay(250);P1_7 = 1;}}

sbit 定义位变量,unsigned char a 定义无符字符型变量a,以节省单片机内部资源,其有效值为0~255。main函数调用Delay()函数。Delay函数使单片机空转,LED持续点亮后,再灭,下一个LED亮。while(1)产生循环。

(三)

上面我们讲了如何使LED产生流动,但是你是否发现一个问题:写的太冗长了!能不能再简单点呢?可以!可以使用C51的内部函数INTRINS.H实现。函数unsigned char _crol_(unsigned char a, unsigned char n) 可以使变量a循环左移n位,如果我们先给P1口赋0000 0001那么当n为1时,便会产生和上面一样的效果!#include#include

void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++);}}

void main(void){unsigned char b, i;while(1){b = 0xfe;for(i

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值