c语⾔switch=实现流⽔灯,单⽚机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;
switch的用法c语言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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论