在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → RS485;PC到单片机单向通讯;

RS485;PC到单片机单向通讯;

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.20M
  • 下载次数:12
  • 浏览次数:323
  • 发布时间:2019-06-29
  • 实例类别:嵌入式开发
  • 发 布 人:chennji
  • 文件格式:.rar
  • 所需积分:2

实例介绍

【核心代码】

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define uchar unsigned char
#define uint  unsigned int
#define LED   P0

uchar const dofly[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,
                             0x0b,0x0c,0x0d,0x0e,0x0f};//0-F
/*------------------------------------------------
                   函数声明
------------------------------------------------*/ 
uchar keyscan(void);//键盘扫描
void delay(uint i); //演示程序
void send(uchar str);//发送数据程序
void receive(void);  //接收数据程序
void read_key(void);//读键值函数


/*------------------------------------------------
                   主函数
------------------------------------------------*/
void main()
{
 TMOD=0x20;      //定时器1,方式2
 TL1=0xfd;
 TH1=0xfd; //设置波特率9600
 SCON=0xd8;
 PCON=0x00; //串行口方式3,允许接收位
 TR1=1; //打开定时器1
 P2=0xff;        //拉高P2口
 while(1)
 {
  read_key(); //读按键程序
  //receive(); //接收数据程序
 }
}




/*------------------------------------------------
              读键值函数
------------------------------------------------*/
void read_key(void)
{
 uchar key;
 key=keyscan();  //调用键盘扫描,
 switch(key)
 {
  case 0xee:send(dofly[0]);break;//0 按下相应的键显示相对应的码值
  case 0xed:send(dofly[1]);break;//1
  case 0xeb:send(dofly[2]);break;//2
  case 0xe7:send(dofly[3]);break;//3
  case 0xde:send(dofly[4]);break;//4
  case 0xdd:send(dofly[5]);break;//5
  case 0xdb:send(dofly[6]);break;//6
  case 0xd7:send(dofly[7]);break;//7
  case 0xbe:send(dofly[8]);break;//8
  case 0xbd:send(dofly[9]);break;//9
  case 0xbb:send(dofly[10]);break;//a
  case 0xb7:send(dofly[11]);break;//b
  case 0x7e:send(dofly[12]);break;//c
  case 0x7d:send(dofly[13]);break;//d
  case 0x7b:send(dofly[14]);break;//e
  case 0x77:send(dofly[15]);break;//f
 }
}


/*------------------------------------------------
              键盘扫描程序
------------------------------------------------*/
uchar keyscan(void)  //键盘扫描函数,使用行列反转扫描法
{
 uchar key;
 uchar cord_h,cord_l;//行列值中间变量
 P2=0x0f;            //行线输出全为0
 cord_h=P2&0x0f;     //读入列线值
 if(cord_h!=0x0f)    //先检测有无按键按下
 {
  delay(100);        //去抖
  if(cord_h!=0x0f)
  {
    cord_h=P2&0x0f;  //读入列线值
    P2=cord_h|0xf0;  //输出当前列线值
    cord_l=P2&0xf0;  //读入行线值
    key=cord_h cord_l;//键盘最后组合码值
   }
  }
  return(key);     //返回该值
}


/*------------------------------------------------
                发送数据函数
------------------------------------------------*/
void send(uchar str)
{
 if(TI==0)
 {
  SBUF=str;
  while(TI==0);
  TI=0;
 }
}




/*------------------------------------------------
                接收数据函数
------------------------------------------------*/
void receive(void)
{
 while(RI==0);
 RI=0;
 P0=SBUF;     //立即点亮LED
}




/*------------------------------------------------
                 延时程序
------------------------------------------------*/
void delay(uint i)  //延时函数
{
while(i--);
}

实例下载地址

RS485;PC到单片机单向通讯;

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警