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,//A
	2,1,1,1,3,//B
	2,1,2,1,3,//C
	2,1,1,3,3,//D
	1,3,3,3,3,//E
	1,1,2,1,3,//F
	2,2,1,3,3,//G
	1,1,1,1,3,//H
	1,1,3,3,3,//I
	1,2,2,2,3,//J
	2,1,2,3,3,//K
	1,2,1,1,3,//L
	2,2,3,3,3,//M
	2,1,3,3,3,//N
	2,2,2,3,3,//0
	1,2,2,1,3,//P
	2,2,1,2,3,//Q
	1,2,1,3,3,//R
	1,1,1,3,3,//S
	2,3,3,3,3,//T
	1,1,2,3,3,//U
	1,1,1,2,3,//V
	1,2,2,3,3,//W
	2,1,1,2,3,//X
	2,1,2,2,3,//Y
	2,2,1,1,3,//Z
	2,2,2,2,2,//0
	1,2,2,2,2,//1
	1,1,2,2,2,//2
	1,1,1,2,2,//3
	1,1,1,1,2,//4
	1,1,1,1,1,//5
	2,1,1,1,1,//6
	2,2,1,1,1,//7
	2,2,2,1,1,//8
	2,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]=' ';
			else
				dis1[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
自己写的,有点乱,有空再来注释,看不明白可以问我或者在座的大佬。

### 回答1: 以下是用C语言实现摩尔斯密码转换器的示例代码: ``` #include <stdio.h> #include <string.h> void convertToMorse(char ch); int main() { char message[100]; int i; printf("请输入要转换的文本:\n"); fgets(message, 100, stdin); for (i = 0; i < strlen(message); i++) { convertToMorse(message[i]); } return 0; } void convertToMorse(char ch) { switch (ch) { case 'a': case 'A': printf(".- "); break; case 'b': case 'B': printf("-... "); break; case 'c': case 'C': printf("-.-. "); break; case 'd': case 'D': printf("-.. "); break; case 'e': case 'E': printf(". "); break; case 'f': case 'F': printf("..-. "); break; case 'g': case 'G': printf("--. "); break; case 'h': case 'H': printf(".... "); break; case 'i': case 'I': printf(".. "); break; case 'j': case 'J': printf(".--- "); break; case 'k': case 'K': printf("-.- "); break; case 'l': case 'L': printf(".-.. "); break; case 'm': case 'M': printf("-- "); break; case 'n': case 'N': printf("-. "); break; case 'o': case 'O': printf("--- "); break; case 'p': case 'P': printf(".--. "); break; case 'q': case 'Q': printf("--.- "); break; case 'r': case 'R': printf(".-. "); break; case 's': case 'S': printf("... "); break; case 't': case 'T': printf("- "); break; case 'u': case 'U': printf("..- "); break; case 'v': case 'V': printf("...- "); break; case 'w': case 'W': printf(".-- "); break; case 'x': case 'X': printf("-..- "); break; case 'y': case 'Y': printf("-.-- "); break; case 'z': case 'Z': printf("--.. "); break; case ' ': printf(" "); break; default: break; } } ``` 这个程序可以将用户输入的文本转换成摩尔斯电码,并在控制台中输出。用户可以输入任意长度的文本,程序会自动将其转换成摩尔斯电码。 ### 回答2: 摩斯密码是一种将字母、数字和标点符号转换为点(.)和线(-)的密码系统。要用C语言编写一个摩斯密码转换器,我们可以采取以下步骤: 1. 首先,我们需要定义一个摩斯密码表,其中包含字母、数字和标点符号与其对应的摩斯密码。 2. 接下来,用户将输入要转换的字符串,可以是字母、数字和标点符号的组合。 3. 我们使用循环来遍历输入的字符串。对于每个字符,我们需要找到其对应的摩斯密码,并打印或输出到屏幕上。 4. 我们可以使用switch语句来检查字符,并在找到对应的摩斯密码后输出。 5. 输出的摩斯密码可以用点(.)和线(-)表示,我们可以使用printf函数来打印这些字符。 6. 最后,我们可以加入一些用户友好的功能,如提示用户输入要转换的字符串,并在输出摩斯密码后询问用户是否继续转换。 下面是一个简单的C语言代码示例,用于将摩斯密码转换为字符串: ```c #include <stdio.h> #include <string.h> void convertToMorseCode(char character) { switch(character) { case 'A': case 'a': printf(".- "); break; case 'B': case 'b': printf("-... "); break; // 其他字母和符号的转换 default: printf(" "); break; } } int main() { char input[100]; int i; printf("请输入要转换的字符串:"); fgets(input, 100, stdin); for(i = 0; i < strlen(input); i++) { convertToMorseCode(input[i]); } return 0; } ``` 这只是一个简单的示例,只包括了几个字母的转换。你可以在`convertToMorseCode`函数中补充完整的摩斯密码表,并在switch语句中处理其他字符。同时,你还可以根据需要进行扩展和优化。 ### 回答3: 摩斯密码是一种将字母、数字、标点符号等转换成一系列短信号和长信号的编码方式,通过不同长度的信号来区分不同字符。下面是一个用C语言编写的摩斯密码转换器的示例代码: ```c #include <stdio.h> #include <string.h> void convertToMorse(char *string) { int i, j; char *morseAlphabet[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}; char *morseNumber[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."}; char *morseSymbol[] = {".-.-.-", "--..--", "..--..", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-...", "---...", "-.-.-.", "-...-", ".-.-.", "-....-", "..--.-", ".-..-.", ".--.-."}; for (i = 0; i < strlen(string); i++) { if (string[i] >= 'A' && string[i] <= 'Z') { j = string[i] - 'A'; printf("%s ", morseAlphabet[j]); } else if (string[i] >= 'a' && string[i] <= 'z') { j = string[i] - 'a'; printf("%s ", morseAlphabet[j]); } else if (string[i] >= '0' && string[i] <= '9') { j = string[i] - '0'; printf("%s ", morseNumber[j]); } else if (string[i] == ' ') { printf(" / "); } else { for (j = 0; j < sizeof(morseSymbol) / sizeof(morseSymbol[0]); j++) { if (string[i] == morseSymbol[j][0]) { printf("%s ", morseSymbol[j]); break; } } } } printf("\n"); } int main() { char inputString[100]; printf("请输入要转换摩斯密码的字符串:"); fgets(inputString, sizeof(inputString), stdin); inputString[strlen(inputString) - 1] = '\0'; // 去掉换行符 printf("转换后的摩斯密码为:"); convertToMorse(inputString); return 0; } ``` 这个摩斯密码转换器使用了3个字符数组`morseAlphabet`、`morseNumber`和`morseSymbol`来存储对应的摩斯密码编码。在`convertToMorse`函数中,通过遍历输入的字符串,根据字符的不同范围,找到对应的摩斯密码编码,并打印输出到控制台。在`main`函数中,首先接收用户输入的字符串,然后调用`convertToMorse`函数来进行转换,并输出结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水水不水啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值