51单片机与蜂鸣器实现摩斯密码转换。
51单片机与蜂鸣器实现摩斯密码转换。
#include <intrins.h>
void delay(unsigned char ms);
void delay2(int i);
void lcd_wcmd(unsigned char cmd);
void lcd_pos(unsigned char pos);
void lcd_wdat(unsigned char dat);
void lcd_init();
void xianshi();
void KeyDown();
void la_ba();
sbit rs= P2^6;
sbit rw = P2^5;
sbit ep = P2^7;
sbit d=P3^0;
sbit d1=P3^1;
sbit lb=P3^2;
int b,c,s=0,q=0,w=0;
#define GPIO_KEY P1
unsigned char dis1[32];
unsigned char dis2[9]={',','A','D','G','J','M','P','T','W'};
unsigned char dis3[9]={'1','2','3','4','5','6','7','8','9'};
unsigned int code laba[36][5]={1,2,3,3,3,//A2,1,1,1,3,//B2,1,2,1,3,//C2,1,1,3,3,//D1,3,3,3,3,//E1,1,2,1,3,//F2,2,1,3,3,//G1,1,1,1,3,//H1,1,3,3,3,//I1,2,2,2,3,//J2,1,2,3,3,//K1,2,1,1,3,//L2,2,3,3,3,//M2,1,3,3,3,//N2,2,2,3,3,//01,2,2,1,3,//P2,2,1,2,3,//Q1,2,1,3,3,//R1,1,1,3,3,//S2,3,3,3,3,//T1,1,2,3,3,//U1,1,1,2,3,//V1,2,2,3,3,//W2,1,1,2,3,//X2,1,2,2,3,//Y2,2,1,1,3,//Z2,2,2,2,2,//01,2,2,2,2,//11,1,2,2,2,//21,1,1,2,2,//31,1,1,1,2,//41,1,1,1,1,//52,1,1,1,1,//62,2,1,1,1,//72,2,2,1,1,//82,2,2,2,1,//9
};
void delay(unsigned char ms)
{unsigned char i;while(ms--){for(i = 0; i< 250; i++){_nop_();_nop_();_nop_();_nop_();}}
}
void delay2(int i)
{while(i--);
}
bit lcd_bz()
{bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0 & 0x80);ep = 0;return result;
}
void lcd_wcmd(unsigned char cmd)
{while(lcd_bz());//ÅжÏLCDÊÇ·ñæµrs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;
}
void lcd_pos(unsigned char pos)
{lcd_wcmd(pos | 0x80);
}
void lcd_wdat(unsigned char dat)
{while(lcd_bz());//ÅжÏLCDÊÇ·ñæµrs = 1;rw = 0;ep = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;
}
void lcd_init()
{lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);
}
void xianshi()
{int i=0,j=1,n=0;while(dis1[i] != '\0'){lcd_pos(0x00);//ÉèÖÃÏÔʾλÖÃwhile(j!=0&&dis1[i] != '\0'){lcd_wdat(dis1[i]);//ÏÔʾ×Ö·ûi++;j=i%16;}lcd_pos(0x40);// ÉèÖÃÏÔʾλÖÃj=1;while(j!=0&&dis1[i] != '\0'){lcd_wdat(dis1[i]);// ÏÔʾ×Ö·ûi++;j=i%16;}j=1;if(dis1[i] != '\0')i-=16;}i=0;
}
void KeyDown()
{int KeyValue=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){delay(5);if(GPIO_KEY!=0x0f){ GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=12;break;}}GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+3;break;case(0Xd0): KeyValue=KeyValue+6;break;case(0Xe0): KeyValue=KeyValue+9;break;}while(GPIO_KEY!=0xf0);if(KeyValue!=c&&dis1[w]!='\0'){b=0;w++;}if(KeyValue<=8&&s==0){if(c==12||c==15)w--;dis1[w]=dis2[KeyValue]+b;d=0;delay(25);d=1;delay(25);}else if(KeyValue<=8&&s==1){if(c==12||c==15)w--;dis1[w]=dis3[KeyValue];d=0;delay(25);d=1;delay(25);}else if(KeyValue==12){if(w>0){w--;dis1[w]=' ';}else{dis1[w]=' ';}d1=0;delay(25);d1=1;delay(25);}else if(KeyValue==15){while(w!=0){w--;dis1[w]=' ';}}else if(KeyValue==9){q++;s=q%2;if(c==12||c==15)w-=2;}else if(KeyValue==10){if(s==0)dis1[w]=' ';elsedis1[w]='0';}else if(KeyValue==11){dis1[w]=' ';}else if(KeyValue==18){dis1[w]=' ';w--;}else if(KeyValue==21){la_ba();}b++;if(b==3)b=0;c=KeyValue;}
}
void la_ba()
{int i,j,t;for(i=0;dis1[i]!='\0';i++){if(dis1[i]>=65&&dis1[i]<=90){d1=0;delay(25);d1=1;delay(25);for(j=0;laba[dis1[i]-65][j]!=3;j++){if(laba[dis1[i]-65][j]==1){t=100;while(t--){lb=~lb;delay2(70);} delay(50);}if(laba[dis1[i]-65][j]==2){t=300;while(t--){lb=~lb;delay2(70);} delay(50);}if(laba[dis1[i]-65][j+1]==3){delay(100);}}} if(dis1[i]>=48&&dis1[i]<=57){d=0;delay(25);d=1;delay(25);for(j=0;j<5;j++){if(laba[dis1[i]-22][j]==1){t=100;while(t--){lb=~lb;delay2(70);} delay(50);}if(laba[dis1[i]-22][j]==2){t=300;while(t--){lb=~lb;delay2(70);} delay(50);}if(j==4){delay(100);}}}}
}
void main()
{lcd_init();delay(10);while(1){KeyDown();xianshi();}
}
完整的工程文件在这里,仿真和程序都在。
链接:https://pan.baidu.com/s/18VSGmOswzlaQh39jBmWmtQ
提取码:679s
自己写的,有点乱,有空再来注释,看不明白可以问我或者在座的大佬。
51单片机与蜂鸣器实现摩斯密码转换。相关推荐
- c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序
51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15 来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...
- 用51单片机驱动蜂鸣器
用51单片机驱动蜂鸣器 #include<reg51.h>//头文件 sbit BEEP=P1^5;//位定义P1的第五个端口为蜂鸣器 void delay() //延时函数 {unsig ...
- 51单片机 AT24C04+蜂鸣器+Proteus仿真
51单片机 AT24C02+蜂鸣器+Proteus仿真 Proteus仿真截图 由于是音频效果,只能以截图展示基本电路 实例代码 #include <reg52.h> #include & ...
- 51单片机控制蜂鸣器发SOS国际求救信号声音实验
说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过. 好了我们 ...
- (十)51单片机——利用蜂鸣器播放《孤勇者》(附成果展示)
目录 硬件部分 蜂鸣器介绍 驱动电路 ULN2003 乐理部分 音符 音符与频率对照 代码部分 运行结果 随着最近孤勇者成为小朋友们的接头暗号之后,于是产生了利用单片机去播放孤勇者的想法,接下来我们来 ...
- 51单片机之蜂鸣器弹钢琴
目录 简介 钢琴音频对照表 仿真测试 仿真电路图 代码 简介 在学习51单片机的过程中无意发现了蜂鸣器调节不同频率居然可以产生不同的声音!!!!! 具体改的是如下这个地方: 于是我突发奇想是不是我能用 ...
- linux串口蜂鸣器报警电路,基于51单片机的蜂鸣器鸣叫震动主从机同步报警设计-BELL--(电路图+程序源码)...
https://v.youku.com/v_show/id_XNDc2MzA2NjQzNg==.html?spm=a2hzp.8253869.0.0 2017-525.51蜂鸣器鸣叫震动主从机同步报警 ...
- 基于51单片机的蜂鸣器音乐,李宗盛林忆莲《为你我受冷风吹》
看到最近反馈还挺好的就多发点存货,所用板材51单片机开发板(普中科技),个人还是很喜欢李宗盛的音乐的,于是就有了今天这期为你我受冷风吹的蜂鸣器版(请使用无源蜂鸣器) 下面是主程序,这套模板也可以用于其 ...
- 51单片机驱动蜂鸣器发声教程(扫盲)
51单片机 蜂鸣器 蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此 ...
最新文章
- python无限循环条件循环_python 语句,条件,循环
- ECSHOP 助手使用
- 常用汉字的unicode 编码
- OpenCV中颜色分布直方图及其应用
- 远程桌面连接mstsc 超扎心
- Chrome 插件开发-主动获取所有页签的tabid,background.js直接向所有页签同步传递消息
- 注意:C语言结构体里不能赋初始值!
- 10.切片slice.rs
- 4、oracle数据库的查询基础
- 对AI的未来以及优势的一些看法
- GoldenGate 之 Bounded Recovery说明
- 不懂*和*区别的可以进来看看
- 智驾仿真-摄像头仿真方案总纲
- k8s命令对node调度 cordon,drain,delete 区别
- OSChina 周五乱弹 —— 源花?真土鳖,我要开源小仙女!
- 【论文阅读笔记】GPT三部曲
- 量子力学之电子自旋与四个量子数
- 实现树莓派控制电机的运转
- 数据库可视化工具 dbForge Studio for MySQL 快速入门以及进阶指导
- 大文件上传NeatUpload简单用法 (转)