当前页面访问量: 25

Linux下C51开发1:蜂鸣器

Posted by

前言

单片机入门,我们从最简单的蜂鸣器开始。蜂鸣器如果一直加电就会长鸣,如果按照一定方式加电会类似于播放音乐。

开发

代码


#include  //包含单片机寄存器的头文件

sbit sound = P3 ^ 7; //将sound位定义为P3.7
/****************************************
函数功能:延时形成1600Hz音频
****************************************/
void delay1600(void) {
    unsigned char n;
    for (n = 0; n < 100; n++)
        ;
}
/****************************************
函数功能:延时形成800Hz音频
****************************************/
void delay800(void) {
    unsigned char n;
    for (n = 0; n < 200; n++)
        ;
}

/****************************************
函数功能:主函数
****************************************/
void main(void) {
    unsigned int i;
    while (1) {
        for (i = 0; i < 830; i++) {
            sound = 0; // P3.7输出低电平
            delay1600();
            sound = 1; // P3.7输出高电平
            delay1600();
        }
        for (i = 0; i < 200; i++) {
            sound = 0; // P3.7输出低电平
            delay800();
            sound = 1; // P3.7输出高电平
            delay800();
        }
    }
}

编译

make test

编译结果

共计三种错误。

第一二行错误表示reg51.h在Linux平台上已经过时了,我们采用8051.h。
所以将

#include 

修改为

#include "/usr/share/sdcc/include/mcs51/8051.h"

第三行错误表示,Linux下标识符不能这样定义。
我们从sdcc的头文件中查看相关代码,
代码位置是

/usr/share/sdcc/include/mcs51/8051.h

我们可以看到

sbit sound=P3^7;

修改为

#define sound P3_7

也就是说Linux下与Windows下的开发以及定义有一定区别。

完整的正确代码是:

#include "/usr/share/sdcc/include/mcs51/8051.h" //包含单片机寄存器的头文件

#define sound P3_7 //将sound位定义为P3.7

/****************************************
函数功能:延时形成1600Hz音频
****************************************/
void delay1600(void) {
    unsigned char n;
    for (n = 0; n < 100; n++)
        ;
}
/****************************************
函数功能:延时形成800Hz音频
****************************************/
void delay800(void) {
    unsigned char n;
    for (n = 0; n < 200; n++)
        ;
}

/****************************************
函数功能:主函数
****************************************/
void main(void) {
    unsigned int i;
    while (1) {
        for (i = 0; i < 830; i++) {
            sound = 0; // P3.7输出低电平
            delay1600();
            sound = 1; // P3.7输出高电平
            delay1600();
        }
        for (i = 0; i < 200; i++) {
            sound = 0; // P3.7输出低电平
            delay800();
            sound = 1; // P3.7输出高电平
            delay800();
        }
    }
}

编译结果为:

编译的结果文件:

格式转换

将ihx文件转换为hex格式文件

packihx 1.ihx > 1.hex

写入设备

使用stcflash工具(需要python-pyserial),原本想用Qt/C++自己写一个,后来发现技术有限,还是熟悉了再说。
Manjaro下直接安装

pacman -S stcflash

写入设备

stcflash 1.hex

运行结果

按照下图进行接线:

beep

蜂鸣器测试

蜂鸣器测试-B站

至此,Linux下单片机开发有一个良好的开始。

参考文档

[1]https://blog.csdn.net/thinkerleo1997/article/details/53145972

赞赏

微信赞赏支付宝赞赏

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注