51单片机(三)使用IO功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


环境搭建

编译环境可以选择使用keil软件,VScode扩展Eide,或者在ubuntu下使用sdcc编译代码

KEIL-C51环境

搭建keilc51环境需要keil4软件和注册机,这里给出网盘地址链接:https://pan.baidu.com/s/1OYyuyw1xWrO7KoR5xQ5aAA 
提取码:6161 

单片机使用IO口

(1)使用独立按键控制LED灯

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit KEY=P3^3;  //定义按键输入端口
sbit LED=P1^2;  //定义led输出端口

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  
    KEY=1; //按键输入端口电平置高
    while (1)         //主循环
    {
        if(!KEY)  //如果检测到低电平,说明按键按下
        {
            LED=0;
        }
        else
        {
            LED=1;  //这里使用if判断,如果按键按下led点亮,否则熄灭
	    }
                    //上述4句可以用一句替代 LED=KEY;
                    //主循环中添加其他需要一直工作的程序
    }
}

(2)外部中断1下降沿触发

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED=P1^0; //定义LED端口

void DelayUs2x(unsigned char t);//us级延时函数声明 
void DelayMs(unsigned char t); //ms级延时
/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
  LED=0;         //LED灯点亮
  EA=1;          //全局中断开
  EX1=1;         //外部中断1开
  IT1=1;         //IT1=1表示边沿触发
  while(1)
  {
                 //在此添加其他程序
  }
}
/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_INT1(void) interrupt 2 
{
 
 if(!INT1)
   {
   DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
   if(!INT1)
   //while(!INT1);//等待按键释放
     {
         LED=!LED;   
     }
   }
}

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
     while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     while(t--)
     {
         //大致延时1mS
         DelayUs2x(245);
	     DelayUs2x(245);
     }
}

(3)不同频率闪烁多个led

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  //此方法使用bit位对单个端口赋值
    unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255

    while (1)         //主循环
    {
        for(i=0;i<10;i++)   //加入 for循环,表明for循环大括号中
					 //的程序循环执行10次
        {
          LED0=0;            //将P1.0口赋值 0,对外输出低电平
          LED2=1;
          LED4=0;
          Delay(5000);      //调用延时程序;更改延时数字可以更改延时长度;
    					//用于改变闪烁频率
          LED0=1;           //将P1.0口赋值 1,对外输出高电平
          LED2=0;
          LED4=1;                
          Delay(5000);
        }

        for(i=0;i<10;i++)
        {
          LED0=0;            //将P1.0口赋值 0,对外输出低电平
          LED2=1;
          LED4=0;
          Delay(60000);      //调用延时程序;更改延时数字可以更改延时长度;
		        			 //用于改变闪烁频率
          LED0=1;            //将P1.0口赋值 1,对外输出高电平
          LED2=0;
          LED4=1;
          Delay(60000);      
        }
                     //主循环中添加其他需要一直工作的程序
     }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(--t);
}

(4)外部中断0下降沿触发

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
  P1=0x55;       //P1口初始值
  EA=1;          //全局中断开
  EX0=1;         //外部中断0开
  IT0=1;         //边沿触发
  while(1)
  {
                 //在此添加其他程序
  }
}
/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
 P1=~P1;         //s3按下触发一次,P1取反一次
}

总结

以上是51单片机关于IO口使用的代码,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值