独立按键控制LED暗灭

要求:

设计一硬件接口电路,并编写﹣C51程序,要求如下:
1.P1口驱动8路 LED 灯,高电平灯亮。P1.0-P1.7对应1-8号灯;
2.P3.1和P3.0外接开关输入,要求开关断开时输入为1,合时输入为0;
3.程序要求为:根据P3.1和P3.0的输入状态,实现不同的跑马灯方式
        P3.1P3.0=00时:1-8号灯顺序点亮;
        P3.1P3.0=01时:8-1号灯顺序点亮;
        P3.1P3.0=10时:1-8号灯全部点亮;
        P3.1P3.0=11时:1-8号灯全部灭;
顺序点亮时,时间间隔为0.5秒。

C51单片硬件电路相关模块:

1.LED模块:

        LED公共端接VCC,故P2端需要接低电平才能接通,例如,需要将D1点亮,则P2_0=0或者令P2=0xFE,即1111 1110,此时单独点亮D1。

2.独立按键模块:

        由于RXD对应的P3_1在左边,TXD对应的P3_2右边,故在单片机上的四个按键从左到右一次为P3_1,P3_0,P3_2,P3_3。

3.MCU模块       

独立按键控制LED暗灭_第1张图片

独立按键控制LED暗灭_第2张图片

独立按键控制LED暗灭_第3张图片

 主函数如图所示

#include 
#include 
#include"Delay.h"    //引入相同目录下的Delay头文件
unsigned char LED;    //定义一个LED的无符号字节型,0~255,八位二进制,可以表示0x7B等

void main()
{
	
	while(1)
	{
		Delay(20);
		while(P3_1==0&&P3_0==0)    //当信号为00的时候左循环点亮
		{
			Delay(500);
			while(P3_1==0&&P3_0==0)
			{
				LED++;
				Delay(500);
				if(LED>=8)
					LED=0;
				P2=~(0x01<=8)
					LED=0;
				P2=~(0x80>>LED);   //1000 0000
				
				//方案2:左移倒序点亮,参考信号00时的左移代码
				/*Delay(500);
				if(LED=0)
					LED=7;
				else
					LED--;
				P2=~(0x01<

 Delay延时函数头文件

#ifndef __DELAY_H__    //if no define,如果没有定义
#define __DELAY_H__    //定义DELAY这个头文件

void Delay(unsigned int xms);    //引用相关.c文件中的Delay函数 

#endif                 //结束跳出

Delay延时函数:延时以1ms为单位的xms个循环(在12.000MHZ下的单片机)

 //在单片机中生成1ms的延时函数,
 //然后通过定义一个xms进行while循环xms次,达到延时xms的效果

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
	 	i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}

}

你可能感兴趣的:(C51单片机,c语言)