编程控制8位LED循环点亮
2013-05-22 19:46
232 查看
8个LED正极通过1千欧的限流电阻接到电源正极,负极接单片机控制端P0口。只要P0口管脚输出低电平,对应的LED就会被点亮。原理图如下:
单片机控制外部器件是通过I/O口的操作来实现的,因此对外围器件的操作,实际上是对I/O口的操作。
编程如下:
1、循环左移
#include<reg51.h> //51系列单片机头文件包含对单片机内部寄存器等的定义#include<intrins.h> //本征函数头文件,包含此头文件可以在程序中直接调用本征函数_crol_(a,n)
#define uchar unsigned char /*以下三句属宏定义语句,以#define LED P0为例,它表示在以后的程序中LED就表示P0,目的在于提高程序的可读性。*/
#define uint unsigned int
#define LED P0
void delay() /*延时1秒子程序,单片机的C程序中通常会采用这种软件延时的方式,但这种延时并不准确*/
{
uint a,b;
for(a=0;a<=350;a++);
for(b=0;b<=32000;b++); /*在板子上实验了很多次,觉得这样延时LED的闪烁速度比较合适。*/
}
void main() /*主程序,通常情况下,主程序要尽量简单,功能模块尽可能在子程序中实现。*/
{
uchar temp;
LED=0xff; /*初始化P0口.*/
temp=0xfe; /*设置初始值。*/
while(1)
{
LED=temp; /*让第一个LED点亮。*/
temp=_crol_(temp,1); /*循环点亮。循环右移:_cror_*/
delay(); /*调用1s延时子程序*/
}
}
2、数组实现LED的循环闪烁
#include<reg51.h>#define uchar unsigned char
#define uint unsigned int
void delay(uint i); /*函数声明,让编译器知道有这个函数,防止调用的时候找不到。就像变量使用前要定义一样。也可以把下边的delay函数体提到main函数上边,就不需要函数声明了。*/
uchar led_data[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*数组包含led_data[0]到led_data[7]*/
void main() 1111 1110 1101 1111
{
uint i;
while(1)
{
for(i=0;i<8;i++)
{
P0=led_data[i];
delay(60000);
P0=0xff;
delay(60000);
}
}
}
void delay(uint i) /*delay函数的函数头,形式必须和函数声明的形式一致。*/
{
while(i--);
}
以上方法只是以P0口为例,对P1口也可以执行同样的操作。
相关文章推荐
- 基于FPGA的按键控制4盏LED灯循环左移点亮
- 用定时器T0的中断控制8位LED闪烁
- 结构化编程:不确定迭代循环控制do while
- 1.5编程基础之循环控制_29:数字反转
- 使用寄存器点亮LED——编程实战
- 树莓派编程wiringPi控制电子数码管显示循环0~9
- 基于FPGA的按键控制LED的循环左移一位
- 用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁
- NOI题解(1.5编程基础之循环控制)
- 基于ARM 的led循环点亮C程序
- Shell编程之循环控制及状态返回值
- C primer plus C 第六章控制语句:循环 编程练习个人练习
- 用定时器T0查询方式2 P0口8位控制LED闪烁 T1查询方式2 P1口8位控制LED闪烁
- 使用IO内存控制硬件点亮LED灯
- STM32移植contiki入门之二:简单编程点亮LED灯
- 树莓派通过I2C总线控制Arduino点亮LED灯
- 51 汇编语言编程:8个按键控制8个LED
- Arduino应用笔记(二)Matlab控制Arduino点亮一个LED灯
- Lesson 4 点亮TiJOS世界的第一盏灯-LED控制
- Arduino应用笔记(三)这一篇和(二)方法不同:Matlab利用串口通信控制Arduino点亮LED