单片机交流
直播中

你又知道了

12年用户 1095经验值
私信 关注
[问答]

如何利用51单片机制作流水灯?

如何利用51单片机制作流水灯?

回帖(1)

刘玉兰

2021-10-9 15:01:05
codeblocks 51单片机学习(一)

原先是在keil下进行51单片机编程的,那个时候跟着视频学,发现没学会什么,后来因某些原因重装了一下电脑,又准备继续学习51单片机,决定换一个环境,也就是codeblocks+sdcc。跟着教程装好了sdcc,然后就可以开始编写51单片机程序了,但是中途遇到一些小坑,记录一下。


  • 环境搭建及工程创建
    使用原先就已经安装的codeblocks17.12,然后安装sdcc。这里就是按照这个人的博客来做的https://www.cnblogs.com/listenscience/p/9376857.html
  • 写代码
    sdcc代码编写和keil有点不太一样,用的库函数是"8051.h",引脚的表示方法P0^0变成P0_0,还有引脚定义***it也不一样由原先的***it P0^0 LED;变成__***it __at 0xE8 LED;***it还需要查底层信息了解引脚的16进制地址,所以在sdcc编译环境下,可以用预编译命令#define LED1 P2_0,这种方式来进行简单省事。
    可以参考这篇文章http://blog.chinaunix.net/uid-24203478-id-3062706.html
    其实用了一时间就发现,用codeblocks写单片机代码的确要好用不少,也可能是我codeblocks用惯了吧,不仅是创建工程和文件,还有清爽的界面,都让人觉得舒适。


/*第一个程序,流水灯*/
#include "8051.h"


unsigned int s[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


void delay50ms(void)   //误差 0us
{
    unsigned char a,b;
    for(b=173;b>0;b--)
        for(a=143;a>0;a--);
}




void main()
{
    unsigned int i;
    while(1)
    {
        for(i=0;i<8;i++)
        {
            P2=s;
            delay50ms();
        }
    }
}


  • 编译
    写完程序后,点击codelocks的build,会在程序的文件夹里生成很多文件,我们需要的是.hex文件,这个意思大概是表示机器代码的16进制文件,这个文件可以烧写到51单片机上。
    这里我用stc-isp进行烧写,我这个软件是当初买单片机给的资料里的,单片机型号要选择你自己单片机型号,由于我的是STC89C52所以是这个选项,剩下的默认就可以。
    烧写时打开程序文件,选择工程文件下的.hex文件,将单片机连接到电脑上,先点击下载/编译,再接通打开板子的电源。稍等一会你的板子就会有反应了!




举报

更多回帖

×
20
完善资料,
赚取积分