永发信息网

串口通信程序

答案:2  悬赏:20  手机版
解决时间 2021-04-25 15:01

单片机采集键盘输入的密码 通过232 串口方式1  给上位机发送信息 上位机只要显示密码 有一个确认键清零就可以了

最佳答案

根据你的要求,写了几个简单的子函数。


#include<reg52.h>
#define N 6   //方便修改密码的长度


sbit key=P1^0;  //确定发送密码,发送完后将密码清0
unsigned char i,a[N]; //定义数组来存放密码


void serial_init()//串口初始化
{
 TMOD=0x20;//设置定时器1为工作方式2
 TH1=0xfd; //波特率为9600,标准波特率
 TL1=0xfd;
 TR1=1;   //启动定时器1
 PCON&=0x7f; //SMOD=0,这里不需要倍频
 SCON=0x40;  //设置串口为工作方式1
}


void serial_send() //串口发送函数
{
 for(i=0;i<N;i++)
 {
  TI=0; //串口发送完毕标志位清0
  SBUF=a[i]; //发送数组中存放的密码字符
  while(!TI);  //等待发送完毕
 }
}


void keyscan() //键盘扫描
{
 if(!key) //用独立键盘简单举例,按下为低电平
 {
  delay(10);//延时10毫秒,去抖。delay()函数省略
  if(!key)
  {


   while(!key); //松手监测
   serial_send(); //发送密码
   for(i=0;i<N;i++)   //发送完毕清0
    a[i]=0; 
  } 
 }
}


void main()


{


  serial_send() ;


  while(1)


  {


   keyscan() ;


  }


}


大概就是这个思路,你可以把密码键盘的值都写在keyscan()函数里,可以加删除键(密码输错可以退格),最好加个显示,密码虽然不能显示出来,但还是要显示输入的个数吧。还有个要提醒你的,就是上位机软件的编写,下位机发送的格式要与上位机接收的格式对应(字符或者数字)。

全部回答

//===================================================================== //    多机通讯主机程序 //zhuji.c //writer:谷雨 2008年3月22日于EDA实验室 //注:主机先发送地址,接收到应答后,再发送数据 //=====================================================================

#include<reg52.h>

#define   addr1    0x31   //从机1地址 #define   addr2    0x32   //从机2地址

unsigned char xx[10]; unsigned char p = 0;

void delay_1ms(unsigned int i) {    unsigned char j;    while ((i--)!=0) {for (j=0;j<125;j++);} } void Uart_Init(void) {  TMOD = 0x20;    //定时器T1使用工作方式2     TH1 = 0xF3;  TL1 = 0xF3;

    PCON  = 0x00;    //SMOD=1;     SCON  = 0xf0;    //工作方式3,9位数据位,波特率9600bit/s,允许接收  SM2  = 0;  TR1   = 1;    //开始计时    EA    = 1;   //中断允许  ES    = 1;    //串行中断允许

} void Serial_INT() interrupt 4 {  if(!RI) return;

 ES = 0;  RI = 0;  xx[p] = SBUF;  p++;  ES = 1; } void send_addr(unsigned char addr)     //发送地址 {    p = 0;       TB8 = 1;    //发送地址帧     SBUF=addr;    //发送地址  while(!TI);    //等待发送完毕  TI=0;    //软件复位TI } void send_data(unsigned char ddata)     //发送数据 {     TB8=0;    //发送数据帧     SBUF=ddata;    //发送数据     while(!TI);  TI=0;    //软件复位TI }

void main() {      Uart_Init();  delay_1ms(2000);  while(1)  {  send_addr(addr1);    //向从机1发地址  send_data(0x33);   send_data(0x01);

 delay_1ms(500);   if(xx[9]=='0') P1=0xaa;

 delay_1ms(500);

   send_addr(addr2);    //向从机2发地址    send_data(0x33);  send_data(0x01);

 delay_1ms(500);   if(xx[9]=='9') P1=0x55;

 delay_1ms(500);  } // while(1); }

//===================================================================== //    多机通讯从机1程序 //cong1.c //writer:谷雨 2008年3月22日于EDA实验室 //注: //=====================================================================

#include<reg52.h> #define   addr    0x31   //从机1地址

unsigned char receive; unsigned char xx[ ]={"1234567890"};

void Uart_Init(void) {  TMOD = 0x20;    //定时器T1使用工作方式2     TH1 = 0xF3;  TL1 = 0xF3;

    PCON  = 0x00;    //SMOD=1;     SCON  = 0xf0;    //工作方式3,9位数据位,波特率9600bit/s,允许接收

 TR1   = 1;    //开始计时    EA    = 1;   //中断允许  ES    = 1;    //串行中断允许

}

void Serial_INT() interrupt 4 {  if(!RI) return;  RI=0;  if(RB8==1)  {   if(SBUF==addr) SM2=0;    else SM2=1;  }  if(RB8==0) receive=SBUF; }

void SendOneByte(unsigned char c) {  TB8=0;      SBUF = c;     while(!TI);     TI = 0; } void SendListChar(unsigned char *DData,unsigned char Ef) {  unsigned char L=0;

 if(Ef!=0)  {   for( ;L<Ef;L++)    //显示有效长度     SendOneByte(DData[L]);    //发送单个字符  }else   while (DData[L]!='\0')    //发送至字串结束   {    SendOneByte(DData[L]);    //发送单个字符    L++;    //下一个字符   }     }

void main() {  Uart_Init();    while(1)  {      switch(receive)      {    case 0xff:     break;     case 0x01:   //在此可以写入要完成的动作,最多可完成256个动作     SendListChar(xx,0);     break;     case 0x02:     break;     case 0x33:     P1=!P1;    //为方便其间,赋值给P1口,测P1口电平来检测该程序     break;        default:     break;   }   receive=0xff;    } }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
手机可唔可以点亮好友问问图标?
过去的忘不掉,新的却让我很犹豫,该怎么抉择
5530如何鉴别行货和水货
NBA2K10如何急停跳投
怎么把NDS模拟器的游戏界面放大
功夫熊猫为什么能打败太郎
燒烤要買什麼的?
为什么我是黄钻有空间却没有空间图标,朋友们
新园小区地址在什么地方,想过去办事
长时间咳嗽 嗓子发痒 偶尔有痰 是什么原因及
牛什么时候能为小料
求个纯刷图流元素加点
天龙峨眉PK招式表
插手机下歌冒出无法识别
求一份建筑方面的职业规划
推荐资讯
黄正超还能活多久
穿越火线体验服7.7的武器性能好吗?
开店需要配备什么?
为啥我的Q没有原来的QQ表情
去哪找陈翔的新单曲《烟火》 详细地址、
仙剑3和仙剑奇侠传3文件有什么不同?
世界上有没有真爱?
冬泳前后可以剧烈运动吗
亲爱的哥哥姐姐,谁有音信种子、送我一个吧。
最近网络流行的歌有哪些
标语和口号是一回事吗,给小学生宣传国学的标
森海塞尔hd205 在淘宝200多 是正品吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?