51单片机与电脑的全双工串口通信

发布者:Turquoise最新更新时间:2016-03-23 来源: eefocus关键字:51单片机  电脑  全双工  串口通信 手机看文章 扫描二维码
随时随地手机看文章
程序功能:4*4键盘按键数值和电脑按键数值显示在单片机数码管上和串口大师上(0~F)全双工

 

 

说明:P2数码管段选,只选一个数码管,P1接键盘,P3.1=TXD  P3.0=RXD 经过max232转换电平之后接电脑,打开串口大师 9600bps 1位校验位 8位数据位。借用请留言! 作者QQ:305659935 超

 

C文件包括两个.h文件

C语言程序如下:

#include
#include
#include
#include<44jianpan.h>

void main()

   uchar key=0;   
   P2 = 0x7f;    //数码管显示"-"
   inituart9600();
 
   TR1 = 1;    // 启动定时器1

 while(1)
 {
   receive_char();
           
   keydown();  
  
 };

}

 

4*4键盘.h文件如下:

/
void delayms(uchar ms)
{
   uchar t;
   while(ms--)
   {
     for(t = 0; t < 120; t++);
   }
}


void delay0(uchar x)   
{
   uchar i;
   while(x--)
   {
     for (i = 0; i<13; i++) {;}
   }
}
          

void beep()
{
  uchar i;
  for (i=0;i<180;i++)
  {
    delay0(5);
    BEEP=!BEEP;       //BEEP取反
  }
   BEEP=1;            //关闭蜂鸣器
   delayms(250);      //延时    
}


uchar  keyscan()
{
   uchar  scan1,scan2,keycode,j;

   JP=0xf0;
   scan1=JP;
   if((scan1&0xf0)!=0xf0)           //判键是否按下
   {
     delayms(30);                   //延时30ms
     scan1=JP;
     if((scan1&0xf0)!=0xf0)         //二次判键是否按下
     
        JP=0x0f;
        scan2=JP;
        keycode=scan1|scan2;         //组合成键编码

        for(j=0;j<=15;j++)
        {
           if(keycode== key_code[j])  //查表得键值
           {
              key=j;
        
              return(key);
    
           }
        }
     }
   }
   else  JP=0xff;

   return (16);
}



void  keydown()

   JP=0xf0;
   if((JP&0xf0)!=0xf0)
   {
     keyscan();
  P0=disp_code[key];
  send_char(key);    
     beep();
   }
}

#endif

uart(串口)协议程序如下:

 


#ifndef __UART9600_H__
#define __UART9600_H__
unsigned char code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
              0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
unsigned char tmp;
void send_char(unsigned char txd);
void inituart9600()   //初始化计时器,装入值,设定参数 9600bps 1位校验位
      
    TMOD = 0x20;   // 定时器1工作于8位自动重载模式, 用于产生波特率
 TH1 = 0xFD;    // 波特率9600
 TL1 = 0xFD;
 
 SCON = 0x50;   // 设定串行口工作方式
 PCON =0x00;   // 波特率不倍增 

    

void receive_char()    //接受1个字符,8位
{

  
 
  if(RI)      // 是否有数据到来
  {
   RI = 0;
   tmp = SBUF;    // 暂存接收到的数据,保存数据
  P0=disp_code[tmp];
  send_char(tmp); ////////////////////////////////发回数据
   
 }

}

void send_char(unsigned char txd)    //// 传送一个字符,发射1byte,8位

{
 SBUF = txd;
 while(!TI);    // 等特数据传送
 TI = 0;     // 清除数据传送标志
}

关键字:51单片机  电脑  全双工  串口通信 引用地址:51单片机与电脑的全双工串口通信

上一篇:stc51单片机内部扩展RAM应用
下一篇:proteus仿真51单片机篮球计分器

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

基于51单片机的DS18B20测量温度实验
实验任务 用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+50度之间,用4位数码管显示出来。 DPY-1实验板连接 用排线把JP-CODE连到JP8是,注意:a接P0.0;b接P0.1;c接P0.3…… 把JP-CS连到JP14上,注意:4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7; 连接好DS18B20注意极性不要弄反,否则可能烧坏。DS18B20的外型与常用的三极管一模一样,上图是它的管脚分布。用导线将JK—DS的DA端连到P3.1上。 硬件电路图 实验原理 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体
[单片机]
基于<font color='red'>51单片机</font>的DS18B20测量温度实验
技术科:你知道51单片机如何存储程序吗
MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。 好,说回MCS-51。 对于程序存储器,有片内和片外两部分。而且无论片内程序存储器,还是片外程序存储器,他们的地址是共享的。如果片内4k ROM的话,地址就是0x0000-0x0FFF,从0x1000-0xFFFF就是外部ROM的地址空间。可外部ROM的0x0
[单片机]
技术科:你知道<font color='red'>51单片机</font>如何存储程序吗
51单片机学习:ADC模数转换实验--光敏电阻AD采集
实验名称:ADC模数转换实验--光敏电阻AD采集 接线说明: 实验现象:下载程序后,数码管上显示AD模块采集光敏电阻的AD值 注意事项: ***************************************************************************************/ #include public.h #include smg.h #include xpt2046.h /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数
[单片机]
51单片机程序下载、ISP及串口基础知识
本文详细介绍了串口、51单片机的ISP下载等基础知识,已经学过单片机的也可以看看,加强一下对这方面的了解。 串口 串行接口简称串口,也称串行通信接口,是采用串行通信方式的扩展接口。 我们比较熟悉的USB接口,全名通用串行总线(Universal Serial BUS),就属于串口。 串行接口按电气标准及协议来分还包括UART、RS232、RS422、RS485等。 老式的台式计算机和部分笔记本上则有RS232串口,这里RS232指的是RS232电平的串口。后来由于这种串口使用很少、速度较慢、体积较大而逐渐在笔记本甚至台式机上被淘汰了。而51单片机等中含有UART串口,UART这里指的是TTL电平的串口。 U
[单片机]
<font color='red'>51单片机</font>程序下载、ISP及串口基础知识
51单片机定时器中断基础
一、中断概念 中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。 把自己想象成单片机的CPU,你正在洗衣服,但是突然快递小哥给你打电话让你去拿快递,于是你停下洗衣服去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。 51单片机有五个中断源 INT0——外部中断0 INT1——外部中断1 T0——定时器/计数器0中断 T1——定时器/计数器1中断 TI/RI——串行口中断 二、使用中断的过程(下面以定时器0、工作方式1为例) 定时器0选择工作方式1 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 G
[单片机]
51单片机编程入门用什么单片机比较好?
每个男人心中其实都有一个”钢铁侠”梦。 希望自己拥有像男主一样的技术,通过技术去改变世界。 不过想做到这一步,需要学的东西实在太多太多,可能这辈子都学不完。 就是这种遥不可及的事情,让很多人望而却步。 每个牛逼的大神,都是从零基础开始,不是他比你聪明多少,而是他能 屡遭挫败,而热情不减。 其实,都是一个沉淀的过程,如果你真的喜欢科学,喜欢技术。 我们应该把目光拉长到5年,10年,20年,甚至当作一辈子的事业和爱好。 最后,这个爱好一定也会给你巨大的回报。 就像学习单片机一样。 最近有个新学员,他是直接学的STM32,虽然能把外设用起来,但是还是感觉自己啥也不会。 每碰到一个问题,如果不百度,根本不知道是怎么回事。 后面跟他聊
[单片机]
基于51单片机+0038红外发射与接收C程序
红外发射程序 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit key1=P3^3; sbit key2=P3^4; sbit key3=P3^5; sbit LED=P1^0; //发射指示灯 sbit out=P3^7; uchar i,a,num1; void init()//初始化作用 { key1=1; key2=1; key3=1; } void delay(uchar aa) { uchar bb,cc
[单片机]
基于<font color='red'>51单片机</font>+0038红外发射与接收C程序
以80C51单片机为例讲述单片机如何运行
前言 要想理解单片机是如何运行程序的,首先需要了解单片机的组成。本文以80C51单片机为例,给大家讲一讲程序在单片机中是如何运行的。 单片机的组成 8051单片机的内部硬件结构包括: 中央处理器CPU:它是单片机内部的核心部件,决定了单片机的主要功能特性,由运算器和控制器两大部分组成。 存储器:8051单片机在系统结构上采用了哈佛型,将程序和数据分别存放在两个存储器内,一个称为程序存储器,另一个为数据存储器在物理结构上分程序存储器和数据存储器,有四个物理上相互独立的存储空间,即片内ROM和片外ROM,片内RAM和片外RAM。 定时器/计数器(T/C):8051单片机内有两个16位的定时器/计数器,每个T/C既可以设置成计数方式
[单片机]
以80C<font color='red'>51单片机</font>为例讲述单片机如何运行
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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