单片机制作

2018-04-30 23:00:25 weixin_40552023 阅读数 4122


需要准备:小车底盘,12v电源,驱动(L298N),万能板,具有pwm功能芯片(这里使用stc12c5608ad),排针至少两条,芯片底座,一个大电容(10μf),小电容(30pf),晶振(110592),两个1000Ω电阻,两个开关,一个LED,蓝牙(hc05),手机蓝牙app。

开始制作

      焊接:首先使用烙铁前要保证烙铁头清洁。在操作时候,先将烙铁放置到位,再推动焊锡,让焊锡包裹住针脚后,先撤焊锡再撤烙铁,整个过程不能超过1秒,而且烙铁尽量垂直起降,用点连成线,切忌拖拉焊锡。如果做错会导致很多麻烦,比如先将焊锡放置,在放置烙铁,很容易使焊锡包裹烙铁。超过一秒或用烙铁拖拉焊锡会使铜片焊盘脱落。


         蓝牙调试:任何一个串口调试助手均可。蓝牙使用at指令,网上有全部指令,这里讲解一些需要注意的,at指令不区分大小写,并且每次只能输入一条,每条以回车结尾。蓝牙的txd接单片机的rxd,蓝牙rxd接单片机txd(rxd:接收数据,txd:发送数据)。

 软件调试:遥控车原理就是遥控器发出信号,单片机处理,电机转动,三个过程。所以所需技术就是,串口通讯,PWM调速。

         串口通讯:

#include
unsigned char flag,num;
void ser() interrupt 4      //串口中断 

   RI = 0;
   num = SBUF;           
   flag=1;
}
void  Init_Timer1(void)
{
    SCON=0x50;          
    PCON=0x00;                        
    TMOD=0x20;         
    EA=1;
    ES = 1;            
    TL1=0xfd;  //开启定时器1
    TH1=0xfd;            
    TR1=1;
}

void main()
{
Init_Timer1();
 while(1)
  {
         
  if(flag==1)   
   {
    SBUF=num;
    while(!RI);
    RI=0;
    flag=0; 
   }
  }
}
          pwm调试:pwm技术是使用数字信号(方波)来控制模拟电路,用方波频率(占空比),来调整模拟电路工作效率。这里使用定时器0,来控制输出频率,关于驱动en1 in1 in2控制左边车轮,其余控制右边(例子为前进程序)。当en1/en2=1 in1/in3=1 in2/in4=0为正转,反之为反转。

          

#include
sbit EN1=P3^5;
sbit IN1=P2^2;
sbit IN2=P2^3;
sbit EN2=P2^4;
sbit IN3=P1^7;
sbit IN4=P1^6;
int value=20,PWM=10,i=0;

void Init_Timer0(void)
{
 TMOD |= 0x01;       
 TH0=0x00;            
 TL0=0x00;
 EA=1;                       

 ET0=1;                    

 TR0=1; 
}

main()
{
 Init_Timer0();
 while(1);
}

void Timer0_isr(void) interrupt 1 using 1
{

 TH0=0x00;  
 TL0=0x00;

IN1=1;
IN2=0;
IN3=1;
IN4=0;
while(1)
{
i++;
if(i<=PWM)
{
EN1=1;
EN2=1;
}
if(i>PWM&&i<=value)//占空比为二分之一
{
EN1=0;
EN2=0;
}
if(i>value)
i=0;
}
}

最后了解完技术原理就可以将串口通讯和pwm组合在一起就可以玩自己的遥控车了。

 

 

2018-02-04 21:12:09 zerokkqq 阅读数 18102
本文将介绍如何自制一个51单片机最小系统及一些附加模块。最终制成的系统将具有烧录程序,运行程序等功能。

先放两张张最终成品如下

 ​
                                                            (正面)

                            (反面--锡接走线法)

提醒读者,下载口的布局有点不合理,请调至第五部的测试下载模块处查看!!!!!

好了,接下来正式进入制作环节:

第一步:仿真

在win7下采用Proteus 7 Professional绘制仿真原理图,具体绘制操作参考:用proteus绘画51单片机最小系统

为了测试所需,再绘制测试模块,如下:
电阻左端分别接单片机的21、22脚,即P2.0、P2.1端口

绘制完成后,为了仿真,再采用Keil uVision4编写测试代码并生成hex文件。具体操作参考文件:
单片机类型015STC90C516RD+A9T15528的代码编写,烧录


测试代码如下:
  1. #include <REGX52.H>      //预处理命令
  2. void main(void)     
  3. {
  4.     unsigned int a;     
  5.     while(1)
  6.    {        
  7.        P2_0 = 0;      //设P2.0口为低电平,点亮LED
  8.        for (a=0; a<50000; a++);  //这是一个循环,起延时作用
  9.        P2_0 = 1;      //设P2.0口为高电平,熄灭LED
  10.        for (a=0; a<50000; a++);
  11.            P2_1 = 0;      //设P2.1口为低电平,点亮LED
  12.        for (a=0; a<50000; a++);
  13.        P2_1 = 1;      //设P2.1口为高电平,熄灭LED
  14.        for (a=0; a<50000; a++);
  15.    }
  16. }
复制代码
准备工作做完了,接下开始仿真,整个仿真原理图如下:

双击单片机,出现如下界面:

单击上图中Program File栏的文件夹图标  ,进行选择测试代码hex文件,找到需要烧录单片机的hex文件,打开。


为了更好的查看线路中电流的流向,建议在Proteus中点击system——set Animation options——在对话框的Animation options 区域选择第三和第四项。

接下来就是查看下仿真结果了,

单击图片中第一个按钮开始仿真  单击图片中第四个按钮结束仿真。
仿真结果为,两个LED,一个亮、灭,另一个亮灭,如此循环;同时可以看见电流流向的箭头。

第二步:准备元器件

第三步:绘制焊接图
原理图和实物焊接图管脚布局不一样,所以需要先布好局,元器件布局如下图:


走线图(未画出单片机底座与附近排针接通)如下:



第四步:焊接
绘制好焊接图后,照着图一部分一部分焊接,就可以了。下图是我采用锡接走线法焊接好后的反面图:


切记不要焊短路了!!
第五步:实物测试
1.测试电源模块

给DC插座上电,反复按自锁开关,查看自锁开关附近的LED以及下载口附近的两个LED是否亮灭。

若此处发现故障,则应立即排除故障再进行下一步。

2.测试下载模块

用杜邦线连接USB_TTL的GND、RXD、TXD、5V0,如下图:


杜邦线的另一端连接下载口的顺序从上往下为5V0、TXD、RXD、GND(连接过程中线不会有交叉),如下图:


打开烧录软件,进行烧录。具体操作参考:单片机类型015STC90C516RD+A9T15528的代码编写,烧录

拔出USB_TTL,给DC插座上电,即可看到接P2.0和P2.1口的LED,P2.0亮-灭-P2.1亮-灭,如此循环。

若此处发现故障,则应立即排除故障再进行下一步。

注:下载模块的+-布局有点不合理,下载的时候不接GND,效果更好!!!!

3.测试复位模块

在上一步程序烧录成功后运行程序,待P2.1亮时,按下按钮,可看见P2.0立即亮起。

若此处发现故障,则应立即排除故障。


结语:第一次制作单片机最小系统,查阅了很多零散资料,最终才做出了自己的第一块51单片机最小系统。
这次经历是值得写下来的,毕竟做这个东西做了好几天,写出来供其他人参考参考。
感谢那些资料的贡献者。

 
下载:
 51单片机最小系统制作.zip (1.95 MB, 下载次数: 36) 

2018-12-06 18:20:23 h_5649512 阅读数 497

单片机制作工具大汇总!!

单片机制作工具大汇总!!!这是一个神奇的帖子,我不会放很多的资料出来,我只放一个列表,大家需要哪个资料就回复告诉我,我再上传,然后先上传几个工具给大家玩玩:可以到闯客网技术论坛下载,下面是参与本次分享的选手,如果急需的话,可以到Q群q我:813238832
单片机工具下载:https://bbs.usoftchina.com/thread-206209-1-1.html
LC谐振频率计算器.rar (4.63 KB
LCD图形生成.rar (256.3 KB
LCD防真器.zip (261.05 KB
commix.rar (188.21 KB
comdebug.rar (155.62 KB
ComAssistant.rar (197.66 KB
BMP生成PCB格式软件.rar (489.13 KB
BMPtoPCB.rar (110.1 KB
Bin_Hex.rar (204.8 KB
AvrCalc_eehome.rar (20.49 KB
AT89ISP.rar (1.1 MB
Afilter.rar (215.75 KB
1616汉字取模.rar (208.74 KB
890LC谐振回路计算.rar (4.63 KB
875电流源在线计算器离线网页.rar (4.45 KB
750定时器计算器.rar (4.72 KB
645规约调试助手.rar (395.08 KB
645规约调试助手.rar (395.08 KB
555设计.rar (368.3 KB
51单片机反反汇编器.rar (247.68 KB
51单片机定时器初值计算器.rar (6.79 KB
51单片机串行口初值计算器.rar (10.13 KB
51波特率初值设定.rar (175.71 KB
51波特率初值计算.rar (179.05 KB
51Hex_Bin.rar (213.9 KB
16.16LED点阵字库软件.rar (27.03 KB
8X8点阵取模软件.rar (10.1 KB
8.8LED点阵字库软件.rar (75.94 KB
LCD防真器.zip (261.05 KB
LC谐振频率计算器.rar (4.63 KB
LC谐振频率计算器V1.20.rar (5.45 KB
LED代码提取.rar (3.64 KB
LED段码提取.rar (183.48 KB
LED数码管字形码发生器.rar (10.2 KB
LM317计算.rar (803.42 KB
lm317设计工具.rar (178.81 KB
mcutool.rar (431.93 KB
MuCodeISP-0.18.rar (46.26 KB
p_hcs301enc.rar (174.29 KB
PCB特性阻抗计算工具软件TXLine.rar (411.31 KB
progisp167.rar (1.11 MB
Protel 99 SE 鼠标增强软件 V3[1][1].0.rar (542.53 KB
usbDebug V1[1].rar (106.26 KB
USBISP下载线资料.rar (1.46 MB
变压器计算.rar (1.07 MB
变压器设计软件.rar (1.65 MB
超级单片机工具.rar (433.5 KB
串口助手.rar (392.58 KB
单片机设计助理 V2[1].4 破解版.rar (1.38 MB
单片机小精灵.zip (688.79 KB
单片机延时计算小程序.rar (8.21 KB
单片机正弦波数据生成器.rar (1.14 MB
单片机正弦波数据生成器.rar (1.14 MB
点整取模小工具.rar (658.92 KB
点整取模小工具.zip (772.86 KB
电感量计算.rar (69.87 KB
电容单片转换CCT.rar (96.51 KB
电阻并联计数器.rar (16.34 KB
洞洞板板上画PCB的专业工具.rar (581.04 KB
更好用的1616汉字取模.rar (164.29 KB
工程单位转换.rar (74.34 KB
汉字生成器(软件).rar (254.06 KB
画流程图.rar (686.91 KB
汇编语言程序库.rar (447.97 KB
计算器.rar (173.1 KB
进制转换.rar (6.07 KB
空心线圈电感量的计算.rar (166.58 KB
取字模软件.rar (1.38 MB
熔丝位软件.rar (45.78 KB
软件延迟时间计算分析.rar (63.3 KB
色环电阻识别程序.rar (75.79 KB
声谱分析器–(50K)很精巧的程序.zip (1.27 MB
实用计算器.rar (69.14 KB
示波器.rar (1.16 MB
数制转换小程序.rar (213.32 KB
衰减器计算器.rar (7.56 KB
炜煌串口调试软件.rar (13.83 KB
显示器测试软件NokiaMonitorTest.rar (325.31 KB
小精灵电气计算.rar (84.56 KB
晓刚电阻值计算.rar (687.88 KB
虚拟示波器.rar (60.85 KB
液晶字模生成程序2.0.rar (209.64 KB
液晶字模提取软件.rar (385.89 KB
一种实用线圈参数计算软件.rar (69.92 KB
音乐代码转换.rar (211.06 KB
在protel99se软件PCB里面放汉字的实现.rar (1.31 MB
正弦波数据生成器(正弦波表).rar (37.53 KB
中断延迟时间…rar (18.42 KB
终极串口调试软件.rar (74.23 KB
专业工具.rar (259.09 KB
字模提取.rar (240.75 KB
字模提取V2.2.rar

再给你们附送点资料:

在这里插入图片描述

2017-07-25 12:53:30 wangwangpengpeng 阅读数 44694
利用51单片机制作一个秒表的详细过程

前面的话:

和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才把这个秒表制作出来,为了给以后的朋友们一些思路,一些参考,所以在这里我把自己制作的整个详细过程整理出来供大家参考。我调试出来是没有问题的,各方面都稳定运行,由于我水平有限,中间可能会有不对的地方,欢迎大家指正,我们一起学习,一起进步!

我将分为三个部分来介绍:1.整体思路,2.硬件电路方面,3.软件编程方面。


1.整体思路

利用51单片机制作秒表时,我介绍精确到十分位(即0.1s)的制作,并让其拥有启动,暂停,复位三个功能。
用到的单片机部分:定时器部分,独立按键的检测与应用,数码管的显示,并结合一些简单的程序即可实现。
用5位数码管来进行显示,分别显示秒的十分位,秒的个位,秒的十位,分的个位,分的十位。用定时器定时50ms,2个定时器中断即是0.1s,即秒的十分位,20个定时器中断即是1s,60个1s即是1分钟,通过程序将5位数码管的值分离出来,并进行显示。这就是我在数码管显示方面的思路,如果不是太清楚,结合我下面软件编程方面的程序来看你可能就会明白,我会在那部分做详细介绍,看完了可能你就懂了。
利用独立按键设置启动/暂停键和清零键,利用独立按键的检测,若启动/暂停按键按下,秒表则启动或者暂停,按下复位键,秒表清零复位。我在程序后面全都有注释,不用担心。看完你就会明白了。
这是我制作的的流程图:




“ms100”表示秒的十分位,"s"表示秒的个位,“s1”表示秒的十位,“min”表示分的个位,“min1”表示分的十位。
“cnt”表示秒的计数位,即多少个一秒,定时满一秒加1,“minu”表示分的计数位,即多少个一分钟,一分钟加1,
这个流程图提供了大致思路,要结合下面的程序部分一起看。可能有些简陋,请多多包涵!


看起来是不是好简单?有木有?请继续往下看。

2.硬件电路方面

每个人的硬件可能都不一样,(哪些控制数码管的位选,哪些控制数码管的段选,哪些控制独立按键等等),大家在自己制作过程中都要仔细考虑,我在这里就用我自己的硬件进行介绍。

这是我的数码管的电路图:(将J12用杜邦线接到对应的P0口,将J16用杜邦线接到对应的P1口)


位选端我用P1口控制,段选端我用P0口控制。在图中我已标明秒的个位s,秒的十位s1,分的个位min,分的十位min1所对应的数码管。该数码管是共阴极。
秒的十分位我用的是另一个共阳数码管。我用P3口控制该数码管的段选,其图如下:



而独立按键我用的P2^7控制“启动/暂停键”,P2^6控制复位键:电路图如下:(将JP5通过杜邦线接到P3口)

硬件电路基本上就是这些,由于分和秒之间要用小数点分隔开,所以分的个位对应的数码管的段码要用带小数点的段码,其余的数码管则不用。

硬件方面是为看懂软件程序做准备,下面我们就开始我们的软件程序方面吧!  

3.软件程序方面


#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int

#define PIN0 P0  //数码管段选端
#define PIN1 P1  //数码管位选端
#define PIN3 P3	 //十分位数码管的段码端
sbit start=P2^7;  //启动/暂停按钮
sbit reset=P2^6;  //复位按钮
uint cnt=0;   //1s的次数的计数值
uint num=0;     //进入中断次数的计数值(一次50ms)
uint num1=0;		//0.1s的次数的计数值
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
//不带小数点的共阴极数码管段码0-9
uchar code table1[]={0xbf,0x86,
0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
//带小数点的共阴极数码管段码0-9

char code table2[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//不带小数点的共阳极数码管段码0-9

void Display(uint w,uint a,uint b,uint c,uint d);  //声明显示函数
void InitTimer0();  //声明定时器初始化函数
void Delayms(uint x);  //声明延时函数

void main()
{
	uint ms100=0;	//秒的十分位
	uint s,s1,min,min1,minu=0; 
	//依次是秒的个位,秒的十位,分的个位,分的十位
	InitTimer0();	  //初始化定时器
	while(1)			//进入死循环
{	
	if(start==0)   //检测启动/暂停键是否按下
			Delayms(20); //延时消抖
	{
		if(start==0)  //消抖之后再次检测
		{
			TR0=!TR0;		//定时器的控制位取反
			while(!start);  //等待按键释放
		}
	}
	
if(reset==0)  //检测复位键是否按下
{
	Delayms(20);	//延时消抖
	if(reset==0)  	//消抖之后再次检测
	{
		num=0;		
		num1=0;		//进入中断次数值清0
		ms100=0;	//十分位的计数值清0
		cnt=0;		//秒的计数值清0
		minu=0;		//分的计数值清0
		while(!reset);		 //等待按键释放
	}
}
	if(num1>=2)		//检测是否达到0.1s,(两个50ms)
	{
		num1=0;  		//进入中断次数值清零
		ms100++;		//秒的十分位的计数值加1
		if(ms100>=10)  //若秒的十分位计数值达到10
		{
			ms100=0;  //清零秒的十分位的计数值
			num1=0;	//进入中断次数值置0
		}
	}
	
	if(num>=20)  //判断计时时间是否达到1s(20个50ms)
	{
		num=0;     //进入中断次数值置0
		cnt++;		 //秒的计数值加1
		if(cnt>=60) //判断是否达到60s
	{
		cnt=0;		//若达到60s,将秒的计数值置零
		minu++;			//分的计数值加1
		if(minu>=60)  //判断是否达到60分钟,一般秒表是用不到60分的,这是为了程序的严谨性

		{
			TR0=!TR0;			//达到60分钟则关闭定时器并清零所有的计数值
			num1=0;				
			num=0;
			ms100=0;
			cnt=0;		
			minu=0;
			
		}
	}
	}	
	s=cnt%10;  	//从秒的计数值里面分离秒的个位
	s1=cnt/10; 	//从秒的计数值里面分离秒的十位
	min=minu%10;	//从分的计数值里面分离分的个位
	min1=minu/10;	//从分的计数值里面分离分的十位
	
	Display(ms100,s,s1,min,min1);  //显示这5个数
}	
}

void InitTimer0() //定时器初始化函数
{
	
	TMOD=0x01; //选择定时器0的工作方式1
	TH0=(65536-45872)/256;  //装初值(定时50ms),晶振11.0592MHz
	TL0=(65536-45872)%256;
	EA=1;		//打开总中断
	ET0=1;	//打开定时器中断
	TR0=0;	//先不要启动定时器
	
}

void TIMER0()  interrupt 1  //定时器中断服务函数
{
	TH0=(65536-45872)/256;  //重装初值
	TL0=(65536-45872)%256;
	num++;		//让进入中断次数值加1,用于判断是否达到1s
	num1++;		//让进入中断次数值加1,用于判断是否达到0.1s
}

void Delayms(uint x)   //延时xms
{
	uint i,j;
	for(i=x;i>0;i--)
		for(j=110;j>0;j--);
}

void Display(uint w,uint a,uint b,uint c,uint d) //定义显示函数
{
	PIN3=table2[w];		//秒的十分位的段选
	Delayms(5);
	
	PIN0=table[a]; //秒的个位的段选
	PIN1=0x7f;		 //秒的个位的位选
	Delayms(5);			
	
	PIN0=table[b];  //秒的十位的段选
	PIN1=0xbf;			//秒的十位的位选
	Delayms(5);
	
	PIN0=table1[c];  //分的个位的段选(带小数点)
	PIN1=0xdf;			 //分的个位的位选
	Delayms(5);
		
	PIN0=table[d];		//分的十位的段选
	PIN1=0xef;				//分的十位的位选
	Delayms(5);		
		
}

由于在打字时可能不小心会弄错一丁点程序,我都是一个字母一个字母手打的,所以请大家理解思路即可,根据这个思路自己去写,这样得到的知识才是属于自己的。毕竟 “读别人的故事,悟自己的人生”。
下面来几张实物图给大家看一下我这个秒表的实际效果。

编译结果:





烧写进单片机的效果:(没有按启动按钮之前)






按了启动按钮之后,秒表将会自动开始计时,由于无法演示动态过程,只能在中间按下暂停键给大家看看效果:











按下复位键后:



由于我用的是一个比较完整的51开发板,所以里面有很多部分,大家只需要注意观察数码管部分就好。
下面再来一个完整的图:





结束语

至此,利用51单片机制作的秒表就已经完成了!若是文章中有什么不懂的地方或者是自己在制作过程中遇到什么问题都可以联系我,或者给我留言,我一定竭尽全力帮助大家!我们一起学习,一起进步!希望大家都能在看完这篇文章后自己动手成功制作出一个秒表,祝愿大家学好单片机!当然,由于自身水平有限,文章中肯定会存在错误或者是考虑不周的的地方,恳请不吝赐教!谢谢大家!

(PS:我写了一整天了,反复的看,反复的改,现在头昏眼花,但是只要能对大家有所帮助,一切都是值得的。)




2019-02-19 20:16:18 qq_41676952 阅读数 4311

基于51单片机的无线遥控器制作

资源链接:https://download.csdn.net/download/qq_41676952/10965512
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。小到电话,玩具,手机,各类刷卡机,电脑键盘,彩电,冰箱,空调,电磁炉,大到汽车,工业自动控制,机器人,导弹导航装置,甚至是美国的火星车,这些设备里面都含有一个或者多个单片机 。单片机的数量不仅远超过PC机,甚至比人类的数量还要多。因此,单片机的学习、开发与应用将造就一大批软硬件工程师。
单片机是一种控制芯片,一个微型的计算机,加上晶振,存储器,地址锁存器,逻辑门,显示器,按钮,扩展芯片,接口等构成单片机系统
本文用最简单最基础的51单片机向读者展示制作无限遥控器的制作。51单片机内部具有一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
本文就是利用51单片机内部UART功能和蓝牙模块实现单片机之间的无限遥控;主要通过编程用于控制其他单片机或微机系统;例如可以用来遥控另外一款单片机控制的模型车的运动(遥控车);控制单片机开发板上LED灯的亮灭等;
准备过程
知识上:会简单的C语言,知道51单片机的基本结构即可。
材料:51单片机(STC89C52),蓝牙模块,洞洞板,焊锡丝,电池,导线,按键开关,铜柱,电容电阻,晶振
工具:电烙铁,镊子
在这里插入图片描述

原理图:分为三个部分,分别为电源模块,蓝牙模块,MCU系统控制模块;
电源模块:为整个系统提供电能
蓝牙模块:实现无线化传输信号
MCU系统控制模块:实现整个系统的控制
在这里插入图片描述

制作过程:
首先是最小系统的制作:
在这里插入图片描述
在这里插入图片描述

然后就是按键的焊接,
在这里插入图片描述
在这里插入图片描述
接着将以上两部分连接
在这里插入图片描述
在这里插入图片描述
接着是电源模块:由两块3.8V电池串联而成,再经过稳压电路将其转化为5V,为整个系统供电;

在这里插入图片描述

插上蓝牙模块, 制作完成在这里插入图片描述
使用说明:按下左边四个接受方会分别接收到字符 ’1’ ’2’ ’3’ ’4’ , 按下右边四个接受方会分别接收到字符 ’5’ ’6’ ’7’ ’8’ ,
测试:用蓝牙串口助手连接遥控器上的蓝牙,通过按下不同的按键,手机会接收到不同的字符
在这里插入图片描述
在这里插入图片描述
资源链接:https://download.csdn.net/download/qq_41676952/10965512