pc多串口程序C语言,求51单片机串口程序,单片机与PC互通讯,C语言

#include #include "com_0.h"

sbit led1=P1^0;

sbit led2=P1^6;

sbit led3=P2^5;

sbit led4=P2^0;

sbit sw1=P3^6;

sbit sw2=P3^7; //接到XTAL1不对

void SetupTimer0()

{

TMOD &=0XF0; //仅保留T1信息

TMOD |=0X02; //设置T0:定时功能,方式2,自动重载8位定时器/计数器

TH0= 256-250;//定时每0.25ms中断一次

TL0= 256-250;

TR0= 1;  //开启定时器

ET0= 1;  //定时器0中断打开

}

data unsigned char us250;

data unsigned int ms;

void Timer0_ISR() interrupt1 //定时中断服务程序,为按键消抖服务

{

if (++us250<4) return;

us250=0; ++ms;

}

data unsigned int k1t, k2t;

bitk1s,k2s;

//按键扫描(含消抖) ,无键盘事件返回0

//按下sw1, 返回1  抬起,返回2

//按下sw2, 返回3  抬起,返回4

unsigned char key()

{

data unsigned int t;

t=   ms-k1t;

if (t>1000)  k1t=ms-1000;

if (sw1==1 && k1s==0 &&t>10)

{k1s=1;  k1t=ms; return 2;}

if (sw1==0 && k1s==1 &&t>10)

{k1s=0;  k1t=ms; return 1;}

if (sw1==k1s) k1t=ms;

t=   ms-k2t;

if (t>1000)  k2t=ms-1000;

if (sw2==1 && k2s==0 &&t>10)

{k2s=1;  k2t=ms; return 4;}

if (sw2==0 && k2s==1 &&t>10)

{k2s=0;  k2t=ms; return 3;}

if (sw2==k2s) k2t=ms;

return 0;

}

void main()

{

data unsigned char ch;

data char buf[16];

data unsigned char bufp;

bitLED2; //用以记住当前led2的状态

us250=ms=bufp=0;

k1t=k2t=0;

sw1=sw2=1=k1s=k2s=1;

SetupTimer0();

Com0Init();

EA = 1;  //全局中断打开

Com0PutStr("Start...\n");

while(1)

{

ch=key();

switch(ch)

{

case 1:

led2=LED2; LED2^=1;

Com0PutStr(LED2?"LED2 ON\n":"LED2 OFF\n");

break;

case 3:

led4=0;Com0PutStr("LED4 ON\n");

break;

case 4:

led4=1;Com0PutStr("LED4 OFF\n");

break;

}

if (Com0Ready()==0)continue;

ch=Com0Getch();

if (ch=='\n'||ch=='\r')ch=0;

//下面一行防止非法按键造成缓冲溢出

if (bufp>=15) {memmove(buf,buf+1, 15);bufp=14;}

buf[bufp++]=ch;

if (ch)continue;

if(strcmp("L10",buf)==0){led1=0;Com0PutStr("LED1 ON\n"); }

else if(strcmp("L11",buf)==0){led1=1;Com0PutStr("LED1 OFF\n");}

else if(strcmp("L30",buf)==0){led3=0;Com0PutStr("LED3 ON\n"); }

else if(strcmp("L31",buf)==0){led3=1;Com0PutStr("LED3 OFF\n");}

else{Com0PutStr("Badcommand.\n");}

bufp=0;//命令处理完毕,则清除缓冲

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值