首页 > 其他分享 >【单片机】实验2:按下式开关控制小灯

【单片机】实验2:按下式开关控制小灯

时间:2023-11-09 18:56:44浏览次数:35  
标签:小灯 控制 LED 开关 二极管 单片机 发光 按下式

#include <REGX51.H>
#include <intrins.h>

//实验目标@萌狼蓝天

/**
1、SW1开关控制LED发光二极管左移流水
2、SW2开关控制发光二极管右移流水
3、由按键开关k1控制LED发光二极管奇偶交替闪烁
4、由按键开关k2控制LED发光二极管亮灭闪烁
*/

// 接口与设备对应关系

/*
	P1	:	LED
	P2.0:	SW1
	P2.1:	SW2
	P2.2:	K1
	P2.3:	K2
*/
// LED灯的状态
unsigned char LED;

//延时函数
void delay(int ms){
	int i,j;
	for(i=0;i<ms;i++) for(j=0;j<1000;j++);
}

//左移函数
char move_left(char val,int mov){
	return  _crol_(val,mov);
}

//右移函数
char move_right(char val,int mov){
	return  _cror_(val,mov);
}
//控制小灯闪烁
void light(char val1,char val2){
		P1 = val1;
		delay(1000);
		P1 = val2;
	  delay(1000);
}
void main(){
		//初始化
		LED = 0x01;
		while(1){
			//k1 和 k2 是按下式开关,先判断k1 k2的状态
			if(P2_2==1 || P2_3==1){
				delay(300); // 防止按下抖动因素的影响
				if(P2_2==1){
					light(0x55,0xaa);//奇偶交替闪烁一次
					P2_2==0;//恢复状态
				}
				if(P2_3==1){
					light(0xff,0x00);//全亮或者全灭
					P2_3==0;//恢复状态
				}
			}else{
				P1=LED;// 避免按下K键后对左移或者右移造成影响
			//不存在K1或者K2按下的情况时,判断SW1和SW2的情况	
				if(P2_0==1 & P2_1==0){
				  //SW1打开  SW2关闭,左移
					LED = move_left(LED,1);
				}else if(P2_1==1 & P2_0==0){
					//SW2打开  SW1关闭,右移
					LED = move_right(LED,1);
				}else{
					//SW1和SW2 同时打开或者关闭
					LED = LED;//LED灯状态不变  此部分代码可省略
				}
				P1=LED;//将值交给P1实现对灯的控制
				delay(1000);//延时		
			}

		}
}






标签:小灯,控制,LED,开关,二极管,单片机,发光,按下式
From: https://www.cnblogs.com/mllt/p/0xWSE5G8BVLGG58OP.html

相关文章

  • CAST电子部单片机方向授课——串口通信 预习文档
    CAST电子部单片机方向授课——串口通信预习文档课前小准备安装串口调试助手第一步:进入MicrosoftStore第二步:在MicrosoftStore中搜索“串口调试助手”第三步:点击获取,按要求安装即可下载完成后,桌面上可能没有快捷方式,需要在win里搜索一下,然后拖到桌面上。注:其他安装方......
  • 51单片机定时器和中断知识
    什么是定时器/计数器?---既可以定时,也能计数的一种单片机内部资源,主要用于软件计时和软件延时等场合。但同一时刻只能使用其中一种功能。定时器的核心功能简单一句话说就是“启动定时器后,每个机器周期到来,初值寄存器自动加1,直到计满溢出”。定时器的工作流程:1.启动信号2.预设机器......
  • 【单片机】初次实验:Keil51的使用
    哔哩哔哩/CSDN/博客园:萌狼蓝天延时器delay(intcount){ inti,j; for(i=0;i<count;i++){ for(j=0;j<1000;j++); }}瞧一瞧题目要求:P0口接八个发光二极管,先让后面四个灯亮,再让前面四个灯亮,循坏#include<REGX51.H>delay(intcount){ inti,j; for(i=0;i<count;i+......
  • 51单片机 小结
    总共耗时14天,把51单片机彻底搞定。耗时13天,把江科大51单片机入门教程视频学完了,就是代码不怎么打。这个另说以后有没有心情手打。以后会不会学习STM32不知道,虽然说现在对下一周的学习也没有什么特别的安排就是了。第十四天做出总结,弄一张思维导图。......
  • 01_单片机及开发板介绍
    单片机及开发板介绍单片机最小系统......
  • 【单片机】I/O口实验
    要求:拨动开关,让所亮小灯位置左移或者右移#include<STC8.H>#include<intrins.h>voiddelay(){ inti,j; for(i=0;i<1000;i++){ for(j=0;j<1000;j++); }}charmove_left(charvalue,intnumber){ value=_crol_(value,number); returnvalue; }charmov......
  • 51单片机中断服务
    1.中断的概念在51单片机中,中断是一种机制,可以让单片机在执行某个任务时,暂停当前程序的执行,转而去执行另外一个优先级更高的任务,待该任务执行完毕后,再回到原来的任务继续执行。中断机制可以有效提高单片机的实时性和响应速度。在51单片机中,中断可以通过设置中断向量表来实现。中......
  • 51单片机-定时器-proteus仿真
    这是代码#include"reg51.h"#defineu16unsignedint#defineu8unsignedchar#defineFOSC11059200L#defineBAUD9600sbitkaiguan=P1^0;u8codeleddat[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x81,0x82,0x84,......
  • ARM单片机知识点
    1、STM32编译信息代码占用FLASH大小为:Code+RO-data,7420字节(5054+2366),所用的RAM大小为:RW-data+ZI-data,8576(372+8204)。编译结果里数据的含义:Code:程序所占用FLASH的大小。RO-data:即ReadOnly-data,表示程序定义的常量,如const类型(FLASH)。RW-data:即ReadWrite-data,表......
  • 单片机的结构逻辑,特性
    连接矩阵io口弱上拉,强下拉......