51单片机led灯控制
Posted 李刚blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机led灯控制相关的知识,希望对你有一定的参考价值。
关于内容理解:
先读懂51单片机的实验原理图,然后再着手编程。
由图可知
1,led灯接的是单片机的P0口,意味着我们只能用P0口来编程。
2,led灯是共阳极,当给低电平时led灯才会亮,(单片机灌电流能力较强,输出电流较弱,所以一般用共阳极)
3,led所在的P0口是读io口,故使用时用一个变量来做中介
实验效果
实现跑马灯效果,P0^0->P0^7口依次亮且每次只亮一个灯,然后P0^7->P0^0。
实验代码
#include <reg52.h> //此文件中定义了51的一些特殊功能寄存器 #include <intrins.h> //--声明全局函数--// void Delay10ms(unsigned int c); //延时10ms void main() { unsigned char i; unsigned char LED; //--首先赋值LED--// LED = 0xFE; while (1) { //--LED往左闪烁--// for (i = 0 ;i < 7 ; i++) { //--将LED 的值赋给P2口--// P0 = LED; Delay10ms(50); //延时一下,为了让灯有持续点亮的时间 LED = LED << 1; // 将LED里面的值左移一位,然后重新赋给LED LED = LED | 0x01; // 移位后,前面的位为高电平 } //--LED向右显示--// for (i = 0 ;i < 7 ; i++) { P0 = LED; Delay10ms(50); LED = LED >> 1; // 右移 LED = LED | 0x80; // 移位后,后面的位为高电平 } } } void Delay10ms(unsigned int c) //误差 0us { unsigned char a, b; //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
扩展:实现流水灯
一次点亮P0^0->P0^7
#include <reg52.h> //此文件中定义了51的一些特殊功能寄存器 #include <intrins.h> //--声明全局函数--// void Delay10ms(unsigned int c); //延时10ms void main() { unsigned char i; unsigned char LED; //--首先赋值LED--// while (1) { LED = 0xFE; //--LED往左闪烁--// for (i = 0 ;i < 8 ; i++) { //--将LED 的值赋给P2口--// P0 = LED; Delay10ms(50); //延时一下,为了让灯有持续点亮的时间 LED = LED << 1; // 将LED里面的值左移一位,然后重新赋给LED // LED = LED | 0x01; // 移位后,前面的位为高电平 } //--LED向右显示--// LED = 0x7F; for (i = 0 ;i < 8 ; i++) { P0 = LED; Delay10ms(50); LED = LED >> 1; // 右移 // LED = LED | 0x80; // 移位后,后面的位为高电平 } } } void Delay10ms(unsigned int c) //误差 0us { unsigned char a, b; //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
以上是关于51单片机led灯控制的主要内容,如果未能解决你的问题,请参考以下文章