Linux下的51单片机独立按键控制显像管实验

1、 实验目的
了解按键的工作原理
学会编写程序检测独立按键;
2、 实验设备
装有 Linux系统的电脑,已装好SDCC交叉编译环境,并带有Python烧写工具;
51单片机开发板 1 个,USB 数据线 1 根。
3、 实验内容
了解独立按键检测过程;
使用 Linux 系统编写程序实现按键检测;

4、 实验原理
单片机检测按键的原理是:单片机的 I/O 口既可以作为输出,也可以作为输入使用,当
检测按键的时候用的就是单片机的输入功能,把按键的一端接地,另外一端接到单片机 I/O
口,在开始上电的时候,单片机的 I./O 的默认为高电平,当按键按下的时候,该 I/O 口的电
平就会被拉低,程序检测到 I/O 变成低电平说明了按键被按下,然后可以实现相应的程序。
5、 实验相应寄存器
P3(0xB0)
位 名称 复位
7:0 P1[7:0] 0xFF
描述
R/W
R/W
普通 I/O 端口。可以从 SFR 位寻址。

6、 51单片机CPU对应引脚图
Linux下的51单片机独立按键控制显像管实验_第1张图片
图 6_1 独立按键电路图
Linux下的51单片机独立按键控制显像管实验_第2张图片
引脚对应表:
KEY1 KEY2 KEY3 KEY4
P3_3 P3_4 P3_6 P3_7
7、 实验程序实现
独立按键检测程序

/*************************************************************************
    > File Name: key.c
    > Author:chensir 
    > Mail:[email protected] 
    > Created Time: 2016年11月26日 星期六 11时37分40秒
 ************************************************************************/

//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include<8051.h>
#define uchar unsigned char
#define uint unsigned int
uchar  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
     0x6f};

uchar a,miao;
uint  num;
uint  counter=0;
void delay(uint z);
void init();
void main()
{
 init();
 while(1)
 {

 if(P3_4==1)
 {
   P0=table[miao%10];
   P1=1;
    delay(5);
    P1=0;
 P0=table[miao/10];
 P1_1=1;
 delay(5);   
 P1_1=0;   
 }
 else if(P3_4==0)  
 {    
     delay(20);
     counter++;
     if(counter%2==1)
     EA=0;
     else
     EA=1;
 }

}
}
void timer0()__interrupt(1)__using(1) 
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 a++;
 if(a==20)
 { 
     a=0;
   miao++;
   if(miao==60)
    miao=0;
 }

}

void init()
{
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 P0=table[miao];
}

void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

8、 实验步骤
1、了解按键的工作原理
2、编写程序,编译无错误,并生成 HEX 文件;
vim key.c (输入代码)
sdcc key.c(会生成.ihx文件)
packihx key.ihx > key.hex (重定向为十六进制文件)
hex2bin key.hex (生成二进制文件)
3、烧写程序,按下KEY2。
sudo python ./stcflash.py ./key.bin
出现下图:
Linux下的51单片机独立按键控制显像管实验_第3张图片
便代表烧写成功了!!!

9、 实验结果
Linux下的51单片机独立按键控制显像管实验_第4张图片
显像管一开始是自动计时的,当按下KEY2时,停止计时,再次按下,又开始计时…..

你可能感兴趣的:(单片机,linux,51单片机)