获取按键值应用数码进行显示同时通过串发送到PC上进行显示

/**********************************************************************************
*              获取按键值应用数码管显示并通过RS-232发送到PC上进行显示                 
*                              
*                                  
*
*                                   
*
* 文    件: TEST.C
* 作    者:  soon
* 部    门:  计算机07级04班
* 编写日期: 2009.5.4
* 模块版本:
* 适用芯片: CPU 89C52RC   
* 修改记录:
* ================================================================================
* 版 本|  日  期  | 修改人 |                 描    述
* ================================================================================
*      |          |        |
*      |          |        |
*      |          |        |
* ================================================================================
*
* 注意事项:在进行发送字符到PC机上时,由于通信波特率为9600,所以在我按键按下的时间
*                内,进行发送的字符较多。所以,必须进行延时处理,使其只通发送一个字符到
*                PC机。本程序进行处理的时间只能进行发送与接收是以字符格式进行的,当格式
*                格式不对时,所进行延时的时间需要进行重新设置。
*      
*          
*          
*         
**********************************************************************************/

#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char


uchar buff[4]={0XC0,0xCF,0XA4,0XB0};         /*定义要进行数码显示的数字*/
uchar buff2[3]={'1','2','3'};                /*定义要进行在串口调试工具中进行显示的字符*/
uchar buff3[]="     ";                       /*用于在串口调试工具中输出空格*/

sbit key1=P3^5;                              /*按键1*/
sbit key2=P3^6;                              /*按键2*/
sbit key3=P3^7;                              /*按键3*/

uchar buf;                                   /*用于保存按键的编号*/
uchar chose;                                 /*用于确定是否有按键按下*/
uchar i;                                     /*用于循环控制*/


void sender(uchar buf);                      /*声明串口发送函数*/
void dispchar(uchar buf);                    /*声明数码显示函数*/
void key(void );                             /*声明获取按键编号函数*/
void delytime(uint time);                    /*声明延时函数*/


/***********************************主函数*************************************/
void main(void )
{
 /*进行设置波特率为9600*/
 TMOD=0X20;

 TL1=0XFD;
 TH1=0XFD;

 SCON=0XD8;
 PCON=0X00;

 EA=1;                                  /*允许中断*/
 TR1=1;                                 /*启动T1中断*/
 ES=1;                                  /*允许串口中断*/
 REN=0;                                 /*禁止接收数据*/


 P2=0X7F;                               /*选中第四个数码显示管*/
 P0=0XC0;                               /*初始化显示*/

 while(1)
 {
  key();                             /*获取按键编号*/

  dispchar(buf);                     /*进行显示*/ 

  if(chose==1)
  {
   delytime(25000);               /*进行延时,这样就只进行显示一次字符,否则进行多次显示*/

   sender(buff2[buf-1]);          /*在串口调试工具中进行显示字符*/

   for(i=0;i<4;i++)               /*在串口调度工具中输出空格*/
    sender(buff3[i]);
   
  }
 }

}

/**********************************************************************************
*                                发送函数
*描述:该函数用于发送字符到PC机。
*
*参数:  要进行发送的字符
*
*返回值:无
*
*注意事项:
**********************************************************************************/
void sender(uchar buf)
{
 SBUF=buf;

 while(TI==0);

 TI=0;                                   /*软件清零*/
}

/**********************************************************************************
*                               进行数码管显示
*描述:该函数用于在数码管上进行显示字符。
*
*参数:要进行显示的字符
*
*返回值:无
*
*注意事项:
**********************************************************************************/
void dispchar(uchar buf)
{
 P0=buff[buf];
}

/**********************************************************************************
*                                获取接键值
*描述:该函数用于获取接键值。
*
*参数:  无
*
*返回值:无
*
*注意事项:由于本人的实验板只有三个按键,所以,对按键的判断没有采用其它的算法。
*          当按键数量有一定的数量时,请采用其它的算法。这样在时间溢率上才能达
*          所需的要求。
**********************************************************************************/
void key(void )
{
 if(key1==0)
 {
  delytime(300);                   /*进行延时,去抖动*/

  if(key1==0)                      /*再次进行扫描*/
  {
    buf=1;
    chose=1;
  }
 }
  
 else if(key2==0)
 {
  delytime(300);

  if(key2==0)
  {
     buf=2;
     chose=1;
  }
 }

 else if(key3==0)
 {
  delytime(300);

  if(key3==0)
  {
    buf=3;
    chose=1;
  }
 }

 else         /*进行保存最后一次按键的编号,否则就只有暂短的显示,又恢复到0*/
 {
     buf=buf;
  chose=0;
 }
}


/**********************************************************************************
*                               延时函数
*描述:该函数用于延时。
*
*参数:要进行延时的时间
*
*返回值:无
*
*注意事项:本延时函数不是一个精准的延时函数,若对延时时间要求太严格,请应用汇编
*          语言进行,那样写出的延时才能准确
**********************************************************************************/
void delytime(uint time)
{
 while(time)
 {
  time--;
 }
}


/**********************************************************************************
||
||
||
||                                END
||
||
||
||
**********************************************************************************/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值