本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
下面是独立按键检测试验的完整程序代码。 程序主要实现的功能是:判断4个独立按键是否被按下,当有按键被按下后,判断是那个按键被按下,然后通过数码管显示被按下按键的编号。
本程序中为了简单起见,没有进行按键释放的判断。
程序中对于按键的处理使用了两个函数Key_Check();Key_Number()。其中Key_Check()函数主要用来检测是否有按键按下,其中包含了软件延时消除按键抖动的处理;Key_Number()函数同来判断哪个按键按下,如果想要增加按键释放的判断,可以在这个函数里面增加判断按键是否被释放的语句。
void HC595_Send_Data(unsigned char byte);这个函数用来在数码管上显示被按下按键的编号。
学习到现在,我们已经实现了单片机I/O口的输出控制和输入判断。下面我们来总结一下AVR单片机I/O口在进行输入输出操作时的注意事项:
- AVR单片机的通用I/O口是有方向的,通过方向控制寄存器DDRx来控制I/O口是输入还是输出状态;使用AVR的I/O口时要先设置DDRx方向寄存器,然后才能进行I/O口的读写操作;
- AVR单片机的I/O口在复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以此时I/O口呈现为高阻输入状态(I/O口的三态为:输入状态、输出状态、高阻状态);
- 复位后要及时对系统中用到的I/O口进行初始化设置,根据系统需要设置用到的I/O口为输入或输出状态,当设定为输入状态时,还要考虑是否使用内部的上拉电阻;在电路设计中,如果能使用内部上拉电阻,可以节省外部的上拉电阻,从而简化电路设计、节省系统成本;
- 对于系统中没有用到的I/O口,从考虑功耗和消除电路干扰的方面考虑,一般设置为输入状态,并使能内部上拉电阻;
- I/O口用于输出时,应设置为DDRx=1(x为相应端口序号),然后用PORTx输出相应值;
- I/O口用于输入时,应设置为DDRx=0(x为相应端口序号),然后用PORTx输出相应值; 用PINx读取外部电平状态 ;注意此时用PORTx设置内部上拉电阻是否有效,PORTx=1表示内部上拉电阻有效,PORTx=0表示内部上拉电阻无效;
- 一旦将I/O口的工作方式由输出状态设置成输入状态后,必须等待一个时钟周期后才能正确的读取到I/O口的PINx的值。
|