51单片机入门(一):输入输出

概述

学习任何单片机(开发板)第一步都是了解输入输出。一般是从输出开始,比如对单个位进行操作(点亮流水灯),对多个位进行操作(数码管,点阵等)。至于输入,最基础的便是键盘(按键)

IO的结构

  1. 初学的时候尽量不要使用P0口作为输入
  2. 如果使用到了P0口做输入,加上上拉电阻
    51单片机内部IO口结构分析与学习

位定义

  1. 一般的来说,位定义就是对单个位进行定义
  2. 语法
    sbit LED=P0^0//注意P要大写,标识符尽量使用大写
    
  3. 示例代码(用于普中51开发板)

宏定义

  1. 定义:宏定义可以使用一个标识符(通常是大写)来替代一个端口(如P2)或者一个常量

  2. 作用:增加程序易读性

  3. 语法

    #define  LED  P2//LED就代表了8个IO口
    

位操作

  1. 定义:位操作就是对位进行的操作
  2. 作用:控制IO口的电平变化
  3. 说明:单片机的位操作很多都是逻辑运算相关
  4. 代码示例
    		int i ;
    			for(i=0;i<8;i++){
          
          
    			LED = ~(0x01<<i)  ;//移位运算符和取反运算符
    			delay(10000);
    			}
    			for(i=0;i<8;i++){
          
          
    			LED = ~(0x80>>i)  ;//右移,共阳取反
    			delay(10000);
    			}
    	```	
    

_crol_函数和 _cror_函数

  1. 函数头文件# include<intrins.h>

  2. 函数语法

    P2=_crol\_(P2,1): 将P2口左移一位
    P2=_cror\_(P2,1): 将P2口右移一位
    
  3. 普中开发板单片机P2口接的是led

蜂鸣器

1.普中派发版 蜂鸣器接在P1.5
2. 可以通过延时的控制来改变蜂鸣器的音调

数码管静态显示

  1. 程序中的lsa,lsb,lsc仅仅是用来显示位选,在静态显示里面并没有什么用处
  2. 可以直接使用IO口进行字形码的输出

动态数码管显示(没有使用595)

  1. 动态显示就是让所有的数码管同时点亮
  2. 程序使用的是一种扫描的思路,即先点第一个,再点第二个,由于扫描的速度很快,以至于根本察觉不到在闪烁。
  3. 注意消隐的使用

独立按键

  1. 接一个4.7k的上拉电阻,按键接到地
  2. P1 P2 P3 都是准双向IO口,可以输出高电平,P0必须接上拉电阻才能输出高电平,P2 P3 P4 接上拉电阻是为了增大IO口的驱动能力。

矩阵按键(扫描)

  1. 输出二进制码(列交换)
 0x07//行
 0x0b
 0x0d
 0x0e
  1. 示范程序(松开检测程序可以不写)
void KeyDown(void)
{
    
    
  	GPIO_KEY = 0x0f;
	if(GPIO_KEY!=0x0f){
    
    
	delay(1000);
		if(GPIO_KEY!=0x0f){
    
    
			switch(GPIO_KEY){
    
    
			 case 0x07:col=0;break;
			 case 0x0b:col=1;break;
			 case 0x0d:col=2;break;
			 case 0x0e:col=3;break;
			}
			GPIO_KEY=0xf0;
			switch(GPIO_KEY){
    
    
			 case 0x70:row=0;break;
			 case 0xb0:row=1;break;
			 case 0xd0:row=2;break;
			 case 0xe0:row=3;break;
			}
		}
	}
}

点阵

猜你喜欢

转载自blog.csdn.net/KafenWong/article/details/121503407