基本信息
源码名称:RS485;PC到单片机单向通讯;
源码大小:0.20M
文件格式:.rar
开发语言:C/C++
更新时间:2019-06-29
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 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--);
}