发新帖本帖赏金 18.00元(功能说明)我要提问
123下一页
返回列表

【平凡之路】——51单片机最小系统

[复制链接]
8059|45
手机看帖
扫描二维码
随时随地手机跟帖
钱晋之|  楼主 | 2016-4-3 10:27 | 显示全部楼层 |阅读模式
本帖最后由 钱晋之 于 2016-4-3 10:19 编辑

好久都没碰单片机了,最近有些想法,想动手做些东西,手边没有合适的平台,于是乎~~
将单片机最小系统制作的过程记录下来,分享给大家:-D
以前学的东西都忘得差不多了,好在查阅手册的技能还没有丢掉,先翻一下手册,看看需要准备些什么?电路图我就不贴了,网上一搜一大把的 !
STC89C52RC单片机、12M晶振、30p瓷片电容、10UF电解电容、10K电阻、10K9Pin排阻、LED、680电阻、40pin底座、洞洞板、排针若干,当然你得有个直流5v电源,就这些,欧了!!!!
IMG_20160402_201245.jpg
Step1:把单片机底座整个缺口,给晶振找个合适的位置,尽量靠近单片机哦!
IMG_20160402_201404.jpg
晶振管脚18、19.
IMG_20160402_201531.jpg
电容30pf贴片的,挺好焊的,细心点别虚焊就行!
IMG_20160402_202551.jpg
Step2:
复位电路,很简单的。我先焊的复位电路,所以在后面31脚又焊了一根电源线,其实可以直接把复位电路的正接在31脚上!大家做的时候注意哦!

IMG_20160402_203447.jpg

IMG_20160402_203455.jpg
Step3:
有个电源指示灯还是很有必要的,不然你也不知道单片机到底上电了没有啊,调试出现问题可以第一时间排除电源问题。就是方便后续调试。

IMG_20160402_213205.jpg
正负电源就拿插针引出来了,简单些,P0、P1、P2、P3这4组IO脚,都拿插针引出来。
IMG_20160402_213217.jpg
把单片机插上,看看还行吧!
IMG_20160402_213326.jpg
下面是P0口的特写,是我之前没注意,找的那个排阻是8脚1K的,手边也没有9脚10K的排阻,于是乎,用贴片焊了一排P0口的上拉,看看还行把。建议大家最好用排阻,贴片的有点不容易焊呀,费时费力的!
IMG_20160402_231453.jpg
最后,写了个小小的程序,上电测试,OK!到此圆满结束,这样的51最小系统板,小巧,方便,在以前经常制作,可以安装在智能小车上,或是当一个单独模块用,不知道大家是怎么做的,贴个图出来交流一下,哈哈!
IMG_20160402_231506.jpg
视频我没拍,内容是红色LED间隔一秒亮灭交替,脑补一下喽!
测试程序:
#include<reg51.h>
sbit Led = P1^0;
unsigned char flag;
void main()
{
        TMOD = 0x00;
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
        flag = 0;
        Led = 0;
        while(1);        
}

void Timer0() interrupt 1
{
        flag++;
        if(flag == 20)
        {
                Led =~Led;
                flag = 0;                 
        }        
}
后续用这个模块完成与其他模块的“对接”,尽请期待!                                                                                                                                                                                                                                                       https://bbs.21ic.com/forum.php?mo ... 1864&fromuid=992290【平凡之路】系列目录




打赏榜单

21ic小能手 打赏了 10.00 元 2016-04-05

dirtwillfly 打赏了 3.00 元 2016-04-03
理由:焊得不错

评分
参与人数 1威望 +3 收起 理由
cov0xt + 3 赞一个!

相关帖子

钱晋之|  楼主 | 2016-4-3 10:28 | 显示全部楼层
欢迎吐槽!

使用特权

评论回复
奥卡姆剃刀| | 2016-4-3 10:54 | 显示全部楼层
顶一个!

使用特权

评论回复
我对天空说| | 2016-4-3 12:53 | 显示全部楼层
好细心

使用特权

评论回复
我对天空说| | 2016-4-3 12:54 | 显示全部楼层
赞一个

使用特权

评论回复
大秦正声| | 2016-4-3 13:14 | 显示全部楼层

使用特权

评论回复
钱晋之|  楼主 | 2016-4-3 18:36 | 显示全部楼层

使用特权

评论回复
大秦正声| | 2016-4-3 19:25 | 显示全部楼层
焊接水平好啊

使用特权

评论回复
cooldog123pp| | 2016-4-3 23:35 | 显示全部楼层
有空也做一个出来 等着 哈哈

使用特权

评论回复
自由心飞扬| | 2016-4-4 00:42 | 显示全部楼层



001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 看我做的 两个都使用的是 STC15W404AS  第一个是两路光耦输入控制,一个上限,一个下限。三路输出,2路PWM 调节输出,控制两个电机转速。外加一路开关信号输出控制一个电机。
第二 用料一个 HX711 小板。调节一路PWM输出。检测蛟龙内 饲料蛟龙推力
压力大小,PWM调节电机直流转速。 觉得吧还是用插接板快。

使用特权

评论回复
自由心飞扬| | 2016-4-4 00:55 | 显示全部楼层
自由心飞扬 发表于 2016-4-4 00:42
看我做的 两个都使用的是 STC15W404AS  第一个是两路光耦输入控制,一个上限,一个下限。三路输出,2路P ...

自从上次那个大哥告诉我尖刀烙铁好用,我就把这个尖圆头烙铁给用锤子锤扁了,做成了刀型,使用了一下,果真 好用。 爽多了。

006.jpg

使用特权

评论回复
自由心飞扬| | 2016-4-4 00:59 | 显示全部楼层
第一个板子的程序。请各位大哥也指点指点。有没有思路上的缺陷。
#include"STC15.H"
#include"io.h"

uint a=1,b=1;
uint ia=0,ib=0;
uchar ka=0,kb=0,kc=1;          // 标记

//----------------- 下面是 端口初始化函数  01

void io_init()
{
        p10=0;                                                //初始化 P10,P11,P37 开机 为弱上拉状态 =0 ;
        p11=0;                                                //--
        p37=0;                                                //--

        P1M1=0X00;        P1M0=0X03;        //  开推挽模式   变 端口 0 状态为 强 0 状态。
        P3M1=0x00;        P3M0=0X80;        //-- 只开P37 的推挽模式
       
}

//-----------------下面是 WPM 输出 初始化函数        02

void pwm_init()                //  wpm  初始化
{
        CMOD=0X02;                        //  时钟来源 为 2分之一  震荡时钟。       
        CCAPM0=0X42;                //                # 01000010   开 PCA0  PWM 0输出。 9脚  P11 输出
        CCAPM1=0X42;                //                # 01000010   开 PCA1  PWM 1输出.  10脚 P10 输出

        CCAP0H=CCAP0L=255;        //        输出 先低电位
        CCAP1H=CCAP1L=255;
                CR=1;                                //         打开  PCA 计数器阵列 开始工作       
}



//-----------------下面是 WPM输出调节 函数        03

void pwm_1(uchar x)                //        大电机。
{
        CCAP0H=CCAP0L=x;
}

void pwm_2(uchar x)                //        小电机       
{
        CCAP1H=CCAP1L=x;
}

//---------------- 下面是 EEPROM    读 数据 函数        04

void du()
{
        IAP_ADDRH=0X00;                // 第一扇区  第一地址 00 00 H
        IAP_ADDRL=0X00;       
        IAP_CMD=0X01;                        // 命令 读
        IAP_CONTR=0X82;
        IAP_TRIG=0X5A;
        IAP_TRIG=0XA5;
        a=IAP_DATA;                                // 第一个地址读出的数据 放到 a 里面

}

//-------------- 下面是 EEPROM 写数据 a 函数。                05

void xie_a(uchar x)                                               
{
        IAP_ADDRH=0X00;                // 先擦除 第一扇区 数据 ,不然写不进去数据。
        IAP_ADDRL=0X00;
        IAP_CMD=0X03;                        // 命令 擦除
        IAP_CONTR=0X82;
        IAP_TRIG=0X5A;
        IAP_TRIG=0XA5;
        //---------               
        IAP_ADDRH=0X00;               
        IAP_ADDRL=0X00;
        IAP_CMD=0X02;                        //  命令 写数据
        IAP_DATA=x;                                //  把数据赋给 IAP_DATA 寄存器 准备写入。
        IAP_CONTR=0X82;
        IAP_TRIG=0X5A;                       
        IAP_TRIG=0XA5;

}


//----------------- 定时器 0  33毫秒 16位自动从装模式  0.75 一个时钟周期 ,时钟频率大概是 15 --16 兆赫        07

void T0_init()                //  定时器0 初始化
{
        TH0=0X00;
        TL0=0X00;
        ET0=1;
        EA=1;

}


//------------------  T0 中断 函数

void T0(void) interrupt 1
{
        ia=ia+1;  //  大概是 没 33 毫秒  增加 1      450*0.033=14.85秒        
        ib=ib+1;
        if(ib>12)
        {
                ka=1;                                //标记置位
                kb=1;                                //标记置位
       
                p12=!p12;
                ib=0;                                //                每 0.033*12=0.396秒  清零一下 IB  从头开始计数
        }
        //----------
        if(ia>10000) {ia=10000;}       
}


//-------- 主函数-----

void main()
{
        io_init();                                //        IO 端口  初始化
        pwm_init();                                //        PWM      初始化
        T0_init();                                //        定时器T0 初始化
        du();                                           // 读 数据 到 a  
        pwm_1(1);                                //  大电机 高速         p32  对应 PWM_1

        while(p32==1);                        //  p32   条件为 假 ,开始跳过去执行下一步
        pwm_1(253);
        pwm_2(1);                                //        开 PWM_2
        TR0=1;                                        //        开定时器                                
//-----------------------------------------------------------------------------  进入循环体
                                                                                        // p33    为 上限
                                                                                        // p32    为 下限       
                 while(1)                                               
                {               
                                        if(kc==1&&ia>40)                // 本程序 只执行一次,属于 指令脉冲执行  要想再执行 只有清零 KC 标记。
                                        {
                                                pwm_2(70);
                                                kc=0;                                        //         清除标记 为 零                       
                                        }
                                       
                                        //-----------
                                        //-----------

                                        if(p33==1)                                //        上限 P33 无料时,  执行 A 速度
                                        {
                                                pwm_1(a);                       
                                        }

                                        if(p33==0)                                //        上限 P33  有料时,  执行 最低基本停止速度 250
                                        {
                                                pwm_1(250);
                                        }

                                        if(p33==0&&ka==1)                                                        //                上限 P33 有料时 ,切 KA = 1 时,  执行 减速度 2  。 KA  =1 时表示执行,为零时 表示不可以执行
                                        {
                                                a=a+2;
                                                ka=0;
                                                if(a>250)        {        a=250;        }                        //     防止 加法 溢出
                                        }
                        //---------------------------

                                        if(p32==1&&kb==1)                                                        //                下限 无料时 ,  执行速度 加 1
                                        {
                                                a=a-1;
                                                kb=0;
                                                if(a<2)        {        a=2;        }
                                        }
                                       



//--------------------------------------  EEPROM

                                        if(ia==360 )                        //        360*0.033=11.88 秒
                                        {        xie_a(a);        }

                                        if(ia==5000 )                        //        5000*0.033=165/60=2.75分钟
                                        {        xie_a(a);        }

                       
                }

}

使用特权

评论回复

打赏榜单

21ic小能手 打赏了 5.00 元 2016-04-05
理由:我理你来了~

自由心飞扬| | 2016-4-4 12:26 | 显示全部楼层
自由心飞扬 发表于 2016-4-4 00:59
第一个板子的程序。请各位大哥也指点指点。有没有思路上的缺陷。
#include"STC15.H"
#include"io.h"

  没人理我 ,做人太失败。

使用特权

评论回复
21ic小能手| | 2016-4-5 15:33 | 显示全部楼层
自由心飞扬 发表于 2016-4-4 12:26
没人理我 ,做人太失败。

不失败,我来理你,建议层主可以开个帖好好说说~~

使用特权

评论回复
杉树林罗| | 2016-4-5 21:31 | 显示全部楼层
虽然我一直在想剪个缺口是为何?

使用特权

评论回复
自由心飞扬| | 2016-4-6 01:04 | 显示全部楼层
自由心飞扬 发表于 2016-4-4 00:59
第一个板子的程序。请各位大哥也指点指点。有没有思路上的缺陷。
#include"STC15.H"
#include"io.h"

哇,真给钱啊打赏啊,好激动。

使用特权

评论回复
自由心飞扬| | 2016-4-6 01:07 | 显示全部楼层
21ic小能手 发表于 2016-4-5 15:33
不失败,我来理你,建议层主可以开个帖好好说说~~

好好 改天我把程序给详细注解一下另开个。

使用特权

评论回复
自由心飞扬| | 2016-4-6 01:18 | 显示全部楼层
杉树林罗 发表于 2016-4-5 21:31
虽然我一直在想剪个缺口是为何?

你眼神真好,一下子就看到哪俩缺口了,先剪的一边的缺口,好盖外壳,结果热转印的时候,给板子放反了,没法又剪了两个。

使用特权

评论回复
洛理小子| | 2016-4-6 13:37 | 显示全部楼层
赞一个

使用特权

评论回复
wch2002| | 2016-4-6 16:20 | 显示全部楼层
支持一下,动手能力还是不错的!

使用特权

评论回复
发新帖 本帖赏金 18.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:黄沙百战穿金甲,不破楼兰终不还。

10

主题

74

帖子

5

粉丝