2.I/O口

2024-07-17 1430阅读

文章目录

  • I/O输出(点灯)
    • 分析电路
    • 代码编写
    • I/O输入(电平检测)
      • 代码编写
      • I/O内部电路分析
        • 51单片机
        • STM32单片机
          • 输入
          • 输出

            I/O输出(点灯)

            分析电路

            看电路图,元器件形成电压差,即可点亮LED灯

            2.I/O口

            代码编写

            使用不同操作进行LED控制

            #include "reg52.h"	//51单片机头文件
            #include 
            sbit LED1 = P1^0;	//引脚初始化:P1^0:对应引脚的LED灯,定义LED1代表P1^0这个引脚的LED灯
            sbit LED2 = P1^1;
            sbit LED3 = P1^2;
            sbit LED4 = P1^3;
            int i;
            //延时1000ms的延时函数
            void Delay1000ms()    //@11.0592MHz
            {
              unsigned char data i, j, k;
              _nop_();
              i = 8;
              j = 1;
              k = 243;
              do
              {
                 do
                 {
                   while (--k);
                 } while (--j);
              } while (--i);
            }
             
            void main()
            {
            	while(1)
            	{
            		//方法一:对位操作,P1^0为0,接通
            		LED1 = 0;	//电路图得知,LED为0时,接通LED灯
            		LED2 = 1;
            		LED3 = 1;
            		LED4 = 1;
            		//方法二:P1寄存器直接赋值,两种效果相同
            		//P1 = 0xfe;   //11111110,LED灯为P1^0~P1^3,则为最低位3位
            		Delay1000ms();
                  
            		//方法一:对位操作,P1^1为0,接通
            		LED1 = 1;
            		LED2 = 0;
            		LED3 = 1;
            		LED4 = 1;
            		//P1 = 0xfd; //11111101
            		Delay1000ms(); 
                  
            		//方法一:对位操作,P1^2为0,接通
            		LED1 = 1;
            		LED2 = 1;
            		LED3 = 0;
            		LED4 = 1; 
            		//P1 = 0xfb; //11111011
            		Delay1000ms(); 
            		//方法一:对位操作,P1^3为0,接通
            		LED1 = 1;
            		LED2 = 1;
            		LED3 = 1;
            		LED4 = 0;
            		//P1 = 0xf7; //11110111
            		Delay1000ms();
            		//对方法三分析
            		//P1 = 0xff; //11111111
            		//Delay1000ms();
            		//P1 = P1
            			P1 = P1
            	unsigned char data i, j;
            	i = 216;
            	j = 37;
            	do
            	{
            		while (--j);
            	} while (--i);
            }
            void main()
            {
            	while(1)
            	{
            		if(KEY1 == 0)
            		{
            			Delay120ms();
            			//双重判断且加延时函数,消除按键抖动
            			if(KEY1 == 0)
            			{
            				LED1 = ~LED1;	//对LED取反,则实现LED开关
            			}
            		}
            		
            		if(KEY2 == 0)
            		{
            			Delay120ms();
            			if(KEY2 == 0)
            			{
            				BEEP = ~BEEP;	//对蜂鸣器取反,则实现蜂鸣器开关
            			}
            		}
            	}
            }
            
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]