|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
初学单片机徘徊在点灯阶段,下一步进攻数码管
#include <reg51.h>
// 定义摩尔斯码数组,每个元素以分号结束
char* morse_codes[] = {
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----." // 9
};
// 定义点划的时间长度
#define DOT_TIME 600 // 点的时间长度,单位ms
#define DASH_TIME (DOT_TIME * 3) // 划的时间长度是点的三倍
#define SYMBOL_SPACE (DOT_TIME) // 符号之间的间隔
#define DIGIT_SPACE (DOT_TIME * 7) // 数字之间的间隔
sbit LED = P3^2; // 定义P3.2引脚为LED
// 延时函数,延时ms毫秒
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 123; j++);
}
// 发送点信号
void send_dot() {
LED = 1;
delay_ms(DOT_TIME);
LED = 0;
delay_ms(SYMBOL_SPACE);
}
// 发送划信号
void send_dash() {
LED = 1;
delay_ms(DASH_TIME);
LED = 0;
delay_ms(SYMBOL_SPACE);
}
// 显示一个数字的摩尔斯码
void display_morse_digit(char digit) {
char* codes = morse_codes[digit];
while (*codes) {
if (*codes == '.') {
send_dot();
} else if (*codes == '-') {
send_dash();
}
codes++;
}
delay_ms(DIGIT_SPACE);
}
void main() {
unsigned char i;
while (1) {
for (i = 0; i < 10; i++) {
display_morse_digit(i);
}
delay_ms(DIGIT_SPACE * 5); // 一组数字后的间隔
}
}
|
|