历史上的今天
今天是:2024年10月29日(星期二)
2019年10月29日 | PC机通过RS232控制单片机
2019-10-29 来源:51hei
单片机与PC机通过RS232相连,编写一个异步串行口通信程序,实现单片机与PC机上的串口助手之间的通信。
功能实现:
1、当PC机向单片机发送字符‘1’~‘8’,打开对应的8个灯;
2、当PC机再次向单片机发送字符‘1’~‘8’时,关闭对应的灯;
3、当PC机向单片机发送字符‘d’时,会在液晶屏上删除一个字符;
4、当PC机向单片机发送字符‘n’时,会在液晶屏上换行显示;
5、当PC机向单片机发送字符‘c’时,会清屏显示;
6、当PC机向单片机发送字符‘m’时,会打开音乐播放,结束后可继续操作;
7、当PC机向单片机发送其它字符时,会显示在1602液晶屏上;
8、当矩阵按键有按键按下时,单片机会把键值发送到PC机上。
仿真原理图如下
单片机源程序如下:
#include #include #include #define uchar unsigned char #define uint unsigned int uchar str[17]; uchar ch; uchar m,n; sbit K1=P3^7; bit play=0; sbit LEN=P3^4; sbit LCDEN=P3^6; sbit RS=P3^3; sbit RW=P3^5; sbit BF=P2^7; sbit LED=P0; sbit BEEP=P3^2; uint I=0,J,K; uchar code keyval[]="123456789*0#"; //按键对应的符号 char s[ ]="MCS-51 Microcomputer"; uchar OpenLight[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar CloseLight[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar code T[49][2]={{0,0}, {0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B}, {0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05}, {0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02}, {0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81} }; uchar code music[][2]={ {0,4},{20,8},{25,4},{22,4},{20,8}, {20,8},{17,4},{20,4},{22,4},{25,4}, {20,8},{20,8},{22,8},{20,4},{17,4}, {15,8},{15,8},{17,8},{20,4},{17,4}, {15,4},{17,4},{13,8},{22,8},{20,8}, {22,8},{20,8},{17,8},{22,8},{20,16}, {20,4},{20,4},{17,4},{15,4},{13,16}, {13,4},{13,4},{15,4},{17,4},{13,16}, {0xFF,0xFF}}; //生日快乐歌的音符频率表,不同频率由不同的延时来决定 uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; //生日快乐歌节拍表,节拍决定每个音符的演奏长短 uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; void delay(uchar p) { uchar i,j; for(;p>0;p--) for(i=181;i>0;i--) for(j=181;j>0;j--); } void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //2¥·?oˉêy void PlayMusic2() { // uint i=0,j,k; if(SONG_LONG[I]!=0||SONG_TONE[I]!=0) { for(J=0;J BEEP=~BEEP; for(K=0;K DelayMS(10); I++; } else I=0; } void delay_us(uchar t) //微秒延时 {uchar i; for(i=0;i<=t;i++); } void Alarm(uchar t) //报警 { uchar i,j,k; for(j=0;j {BEEP=0;delay_us(50);BEEP=1;delay_us(50);} for(k=0;k<100;k++) {BEEP=0;delay_us(110);BEEP=1;delay_us(110);} } } void pause() { uchar i,j; for(i=150;i>0;i--) for(j=150;j>0;j--); } void delay_ms(unsigned int xms) { int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void PlayMusic() { uchar i=0; while(1) { if(i==40){ ET0=0; break; } m=music[i][0]; n=music[i][1]; if(m==0x00) { TR0=0; delay(n); i++; } else if(m==0xFF) { TR0=0; delay(30); i=0; } else if(m==music[i+1][0]) { TR0=1; delay(n); TR0=0; pause(); i++; } else { TR0=1; delay(n); i++; } } } uchar keypad4_3()//按键扫描函数:要去抖,若有按键按下,返回对应的按键值(0-11),没有按键按下返回12 { uchar i,row,temp; uchar key=12;//按键号,初值设置为12,目的是:没有按键按下时返回12; //若不设初值(默认值为0),没有按键按下时,将返回0,会误认为0被按下 row=0xef; //从第一行开始 for(i=0;i<4;i++) { P1=0xff; P1=row; //第i行信号,对应行为低,其他全为高 row=_crol_(row,1); //生成下一行信号 temp=P1; //读入扫描信号 temp=temp&0x07; //屏蔽高5位信号,只保留低3位列信号 if(temp!=0x07)//有按键被按下,因为第i行某列有按键按下,则低3位中有一位为低 { delay_ms(20); //延时去抖 temp=P1; temp=temp&0x07; if(temp!=0x07) //再次确认有按键被按下 { switch(temp) //根据低3位列信号,判断哪个按键被按下 { case 0x06:key=0+3*i;break; //第i行第1列按键被按下 case 0x05:key=1+3*i;break; //第i行第2列按键被按下 case 0x03:key=2+3*i;break; //第i行第3列按键被按下 } do { temp=P1; //再次扫描按键 temp=temp&0x07; }while(temp!=0x07); //等待按键释放 } } } return(key);//扫面结束,返回按键值 }
下一篇:51单片机入门基础教程
史海拾趣
|
在各种车辆中,配备多种多样射频接口的模块和设备的应用日益增长。因为这些模块必须满足严格的可靠性要求,所以在调节和最终测试中必须能够获得可再现的测量结果。经过高度有效的屏蔽和严格的设计,罗德与施瓦茨公司的新型RF测试舱设备能够确保对配 ...… 查看全部问答> |
|
Die Dresdner MessstraßenbahnThe Dresden Measurement Tram Die Dresdner MessstraßenbahnThe Dresden Measurement Tram… 查看全部问答> |
|
你们总是经常以发放开发板来吊大家的胃口,如果真正为了让坛子里面朋友都能够有机会学习,你们就应该多生产点LM3S8962开发板,定个合理的价格卖给大家:Q… 查看全部问答> |
|
着急啊,用multisim做MAX264滤波器怎么样也不能输出信号 本帖最后由 paulhyde 于 2014-9-15 09:30 编辑 请问有没有大牛能给提供一个设计文件里面的MAX264是能够输出的 输出什么高通低通都行。 啊 小弟也不知道自己电路对不对,因为昨天第一次用。。哎 … 查看全部问答> |
|
2011年度热词:Linux 过去在学校,我打算绕过它,上班后,我第一个活就把我往上面撞。 于是开始了Linux 这番折腾比较悲催——但现在想想跟难度没关,跟做事的手法有关...... 到近期由于要去做另一个东西,基本它和我暂时没关系 ...… 查看全部问答> |
|
工作内容:1、从事视频相关算法的FPGA开发工作;2、完成算法定点,RTL编写,板级调试工作;3、编写设计文档并提供相应的技术支持;4、参与系统方案设计与技术规范制定。 任职要求:1、电子、通信、自动化等相关专业毕业,本科及以上学历,3 ...… 查看全部问答> |
|
系统启动一半就不动了,求解。内核文件系统都是用评估板自带的,AM/DM37X—EVM 终端打印信息如下: Starting kernel ... Uncompressing Linux........................................................................................................................................................ done, booting the ...… 查看全部问答> |
|
本人最喜欢做的事情就是DIY开发板,在论坛已经Show不是开发板了,下面来Show一下本人最近做的GPRS+GPS开发板。本开发板的特殊是GPRS+GPS,而已带触摸3.2寸TFT彩屏,完全可以自己DIY一个智能手机哦。。。 请大家到《Show ...… 查看全部问答> |




