单片机键盘输入及串口发送

发布者:悠闲之旅最新更新时间:2015-10-12 来源: eefocus关键字:单片机  键盘输入  串口发送 手机看文章 扫描二维码
随时随地手机看文章
#include"reg52.h"

typedef unsigned char uchar;
typedef unsigned int uint;
        
    //数码管端口控制
sbit SG = P0^0; //控制个位 
sbit SS = P0^1; //控制十位
unsigned char code rst[6]={0xe4,0xc0,0xe0,0xc0,0xe0,0x22};//定义一个code类型 实现软件复位
uchar tab0[] = {0x81,0xbd,0x92,0x98,0xac,0xc8,0xc0,0x9d,0x80,0x88}; //0~9 共阳数码管
uchar tab1[2] ={0xfe,0xfe} ;
uchar SendBuf[10];//发送的数
uchar *p;
uchar t1,t2;
uchar channel;
uchar SendLen=0,BufLen=7;
Timer_0();//数码动态扫描的定时函数
Delay(uint t);//按键去抖的延时函数
uint Key_1();//键盘扫描函数
uint Key_2();//键盘返回值函数
Delay();//延时函数
Reset();//复位函数
Affirm();//确认发送函数
void init_ser1();//串口初始化函数
void SendTo();  
void Coding(char,char,char,char,char);
main()
{
   uchar n;
   init_ser1();//串口初始化函数
   P2=0x00;
   P3=0x0f;
   p=tab1;
   Timer_0(); //定时器初始化函数
   SendTo();
   t1 = 0;
   t2 = 0;
   while(1)
    {
 
       n=Key_2();
       if(n!=0xff)
       {

     //Led=0; 
       if(*p==0xfe)
    {
     if(p==tab1)
     {
    t1 = n;
     }
   else if(p==tab1+1)
    {
      t2 = n;
    }
    //Led=1;
    Delay(9000); //特别关键的延时
    //Led=0;
   
    *p=tab0[n];
    p++;
    }
    }
    
  }
}
uint Key_1()
 {
 uint i,j;
 if(P2!=0x00)
 {
  Delay(300);//去除按键抖动
 if(P2!=0x00)
  
    i=P2;
    return(i);
 }
  }
  if(P3!=0xf0)
  {
    Delay(300);
   if(P3!=0xf0)
  
    j=P3;
  return(j);    
  }
 
  }    
 uint Key_2()
 {
  switch(key_1()) //根据扫描结果选取值
  {
   case  0x01:return 1;break;
   case  0x02:return 2;break;
   case  0x04:return 3;break;
   case  0x08:return 4;break;
   case  0x10:return 5;break;
   case  0x20:return 6;break;
   case  0x40:return 7;break;
   case  0x80:return 8;break;
   case  0x1f:return 9;break;
      case  0x2f:Reset(); break;
   case  0x4f:return 0;break;
   case  0x8f:Affirm();break;
   default:return 0xff;  break;
 }
 }
 Delay(uint t)  //延时函数
 {
 
   while(--t);
 
 }
 Reset()//清除复位函数
 {
   Delay(20000);
  Coding(0,0,0,0,0);
   (*((void (*)())rst))();//复位
 }
 Affirm()//确认发送函数
 {
  
  
   Delay(20000);
   channel = t1*10 + t2; 
   Coding(channel,0,0,0,0);
   SendTo();
  
   //flag=1;
 }
  Timer_0()//定时器0初始化
  {
   TMOD=TMOD&0xf0|0x01;
 TR0=1;
 ET0=1;
 //EA=1;
  }
  interrupt_0() interrupt 1 //数码管扫描
  {
   TH0=0xf8;
 TL0=0x30;

    P1=tab1[0];
 SG=1;
 SS=0;
 Delay(150);

 P1=tab1[1];
 SG=0;
 SS=1;

  }
  
  void Coding(char CHANNEL,char Command3,char Command4,char Command5,char Command6)
  {
   SendBuf[0]=0xFF;
 SendBuf[1]=CHANNEL;
 SendBuf[2]=Command3;
 SendBuf[3]=Command4;
 SendBuf[4]=Command5;
 SendBuf[5]=Command6;
 SendBuf[6]=Command6+Command5+Command4+Command3+CHANNEL;
   }

void init_ser1()
{

// REN=1;  //允许串行口接收数据
//
// SM0=0;
// SM1=1;   //串行口工作方式为1
//
// TMOD=TMOD&0xf0|0x20;//通过定时器1设置串口波特率
// PCON|=0x0;
// TH1=0xFD;
// TL1=0xFD; //波特率9600
// PS=1;
//
// TR1=1;     //启动定时器1
// ES=1;    //开串行口中断
 // PS=1;
     PCON=0X00;
     SCON=0X50;
     TMOD|=0X20;
  TH1=0xFd;
     TL1=0xFd;
     TI=1;
     EA=1;
     TR1=1;
  ES=1;
}
void Serial(void)  interrupt 4
{
 if(RI)
  {
  RI=0;
  }
  if(TI)
  {
      TI=0;
   //Delay(20);
  if(SendLen >= BufLen) BufLen = 0;
  if(BufLen)
  {
   SBUF = SendBuf[SendLen++];
  }
     }
}
void SendTo(void)
{
 BufLen = 7;
 SendLen = 0;
  SBUF = "" ;
 do{}
 while(BufLen); 
}

关键字:单片机  键盘输入  串口发送 引用地址:单片机键盘输入及串口发送

上一篇:单片机 4*4 矩阵键盘应用
下一篇:单片机中的上拉、下拉电阻

推荐阅读最新更新时间:2024-03-16 14:35

单片机实验板2011_V1.1-ADC0809练习程序
原理图: ADC0809控制时序: 测试程序 /************单片机教学实验板 ******************/ /*功能描述:ADC0809练习 */ /*作者:郑 文 */ /*编写时间:2011.3.1 */ /*接外部晶振11.0592 MHZ */ /*功能描述*/ //AD采集声音 LED输出 #include reg52.h #include STC_Delay.h #include stdio.h #include stdlib.
[单片机]
<font color='red'>单片机</font>实验板2011_V1.1-ADC0809练习程序
单片机彩灯控制系统(项目一)
任务描述:某企业承担了一个LED彩灯控制系统设计任务。此彩灯控制系统由时钟电路、复位电路、8个发光二极管LED灯组成,要求单片机并行端口控制LED灯按照1,2→3,4→5,6→7,8→1→2→3→4→5→6→7→8的顺序循环点亮,每个状态停留1秒,循环不止。请用单片机设计其控制系统并调试运行。 硬件图: 元件清单: C语言程序: #include reg51.h unsigned char led ={0x03,0x0c,0x30,0xc0,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(unsigned int k); void main()
[单片机]
<font color='red'>单片机</font>彩灯控制系统(项目一)
基于MSP430FW427的无磁水表设计方案精编
  1 MSP430FW42x单片机介绍   MSP430FW42x系列单片机是TI公司针对电子式流量与旋转运动检测最新开发的专用MCU芯片,它将超低功耗MCU、旋转扫描接口(SCAN IF)和液晶显示LCD驱动模块完美地结合在一起。该器件的超低功耗结构和流量检测模块不仅延长了电池的寿命,同时还提高了仪表的精度与性能。MSP430FW42x的典型应用包括热量仪表、热水和冷水仪表、气体仪表和工业流量计、风力计以及其他旋转检测应用。   2 流量测量的原理   2.1 基本原理   一个由叶轮或螺旋齿轮构成的机械装置把流体流动转换为转动,这种转换能够实现对流体流量的测量。   把一个谐振回路中的电感置于叶轮的上方可
[单片机]
基于51单片机的电力载波通信开关电路的制作
一、原理图: 二、C程序源代码 /* 此程序已经经本人亲自调试运行过,如有疑问,请联系 QQ:286288986 */ #include reg52.h //预定义头文件 #define uchar unsigned char //宏定义 sbit keyin=P3^3; //按键定义 sbit led=P3^5; //指示灯定义 uchar a; //接收数据记存器 void main() //主函数 { keyin=1; //按键口置1 led=1; //灭led灯 TMOD=0x20; //选择顶时器/计数器1中的方式2 SP=0x60; // 设置堆榨地址 TH1=0xfd; //波特率9600bit/
[单片机]
基于51<font color='red'>单片机</font>的电力载波通信开关电路的制作
MSP430单片机三个典型的复位电路
典型的复位电路有以下3种: (1) 在RST/NMI管脚上接100K欧的上拉电阻。 (2)在(1)的基础上再接0.1uf的电容,电容的一端接地,可以使复位更加可靠。 (3)再(2)的基础上,再在电阻上并接一个型号为IN4008的二极管,可以可靠的实现系统断电后立即上电。
[单片机]
MSP430<font color='red'>单片机</font>三个典型的复位电路
基于MCU CPLD变压器测试系统的设计与实现
1 引言 BX型信号变压器,BG型轨道变压器和ZG型硅整流器作为铁路信号电器设备的前端,其工作的稳定性、准确性直接关系到行车安全,变压器的可靠检测是严抓质量的第一步,对于生产厂家而言,测试流程不允许抽样,且测试结果应留档。本套测试系统用来测试铁路变压器的各种要求参数,包括原边空载电流、次边空载电压、次边带载电压电流,变压器绝缘电阻、原边电压频率,测量结果精度要求3%,测试系统分为上下位机两大部分,下位机运用智能仪表的设计思想,在MCU和CPLD控制基础上对各种要求测试参数分别进行自动测试,上位机上采用VC++6.0编写软件实现串口通讯,归类统计并判断是否合格,存储打印结果,系统满足操作简单可靠,提高效率,减少误差。 2 功能介
[测试测量]
单片机红外遥控调光程序
/* 红外无线遥控LED灯 + 变亮 按- 变暗 按CH- 关灯 按CH- 开灯CH */ #include reg52.h /*==================================== 自定义类型名 ====================================*/ typedef unsigned char INT8U; typedef unsigned char uchar; typedef unsigned int INT16U; typedef unsigned int uint; /*==================================== 硬件接口位声明 ====
[单片机]
基于MCU和FPGA灵活设计车载信息娱乐系统
汽车工业蓬勃发展,车载信息娱乐系统已经不再是豪华轿车的独有设施,越来越多的中低端轿车开始拥有自己的信息娱乐系统。   然而,车载信息娱乐系统是一个高度集成的复杂系统,其中可以包括导航系统、影音系统、电话系统、空调通风系统,以及其他车内外舒适设备的控制系统等,这些系统涉及的通讯网络可以包括LINK_KEYWORD0、MOST、LIN、蓝牙和其他无线网络协议等。设计这样一个复杂系统,不但要考虑系统的性能和成本,更要考虑设计的灵活性,以保持产品在快速变化的市场中的竞争力。   汽车电子系统要求温度适应范围大、有利于生产标准化和很长的设计寿命。车载信息娱乐系统是一个快速发展和适应各种用户的系统,如果既要保持一个设计具有长的寿命又要有高度的
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved