电子小制作51单片机_51单片机创意小制作 - CSDN
  • 高级创意,单片机电子DIY制作精华资料汇总 今天给大家分享创意生活,电子DIY制作精华资料汇总,资料有点多,将近400个电子创意,够同学们学习和交作业的了,需要的可以在闯客网技术论坛下载,有问题加群解决:...

    高级创意,单片机电子DIY制作精华资料汇总

    今天给大家分享创意小生活,电子DIY制作精华资料汇总,资料有点多,将近400个电子创意,够同学们学习和交作业的了,需要的可以在闯客网技术论坛下载,有问题加群解决:813238832

    下载链接:https://bbs.usoftchina.com/thread-203642-1-1.html


    一、温度控制和湿度控制   
    1. 简单实用的恒温控制器   
    2. 两个元器件组成的恒温控制器   
    3. 插座式自动温控器   
    4. 新颖的温度控制器   
    5. 多功能恒温控制电路   
    6. 数字显示温控仪   
    7. 简易数显温控仪   
    8. 高精度无阶跃恒温控制器   
    9. 实用自动巡回测温仪   
    10. 全功能自动孵化控制仪   
    11. 高精度孵化温控仪   
    12. 湿度控制器   
    13. 农用土壤湿度控制电路   
    14. 组合电阻式土壤湿度仪   
    15. 超声波加湿器   
    16. 超声波微型雾化器   
    二、声音控制、光线控制和触摸控制   
    17. SK-6声控电路   
    18. 快乐声控彩灯   
    19. 实用的声控开关   
    20. 声控电源插座   
    21. 声控照明节电开关   
    22. 声波遥控器   
    23. 给电动玩具增加声控功能   
    24. 辅导学生安装的声控开关   
    25. 如何辅导学生装好声控电路   
    26. 简易实用的光控开关   
    27. 稳定可靠的光控电路   
    28. 多路红外遥控器 
    29. 多功能光电控制器   
    30. 鸡舍灯光自动控制器 
    31. 小屏幕LED汉字广告机   
    32. 学装光控窗帘 
    33. 全天候太阳能自动跟踪控制器   
    34. 触摸式开关   
    35. 廉价的触摸开关   
    36. 光控、触摸式多用开关插座   
    三、时间控制 
    37. 挥手停闹的电子钟   
    38. 给石英钟增加音乐报时功能(一)   
    39. 给石英钟增加音乐报时功能(二)   
    40. 新颖的集成电路数字钟   
    41. 可编程数字钟   

    1. 自动双向定时器   
      43. 重复式定时电路   
      44. 自制9挡定时器 
      45. 用LED数字钟做定时开关 
      46. 实用记忆定时器 
      47. 家用定时提醒器   
      48. 高精度定时器   
      49. 两路4级定时控制器   
      50. 多路可编程时间控制器   
      51. 新型数显可逆定时控制器 
      152. 多用可编程时间控制器   
      53. 简单有趣的下棋计时电路 
      54. 数字式定时器 
      55. 小小定时提醒器 
      56. 方便的万用时间控制器 
      57. 灯箱定时控制器 
      58. 实用的多功能钟控电路 
      59. 简易钟控定时器   
      60. 摄像机定期间断拍摄自动控制器 
      61. 家电自动控制器的制作   
      62. 大功率时间控制器   
      四、程控和遥控 
      63. D触发器的制作   
      64. 间歇工作的自控装置 
      65. 沙盘时序控制电路 
      66. 工业用四路可编程控制器   
      67. 程序控制和显示电路   
      68. 实用型超声波遥控器 
      69. 红外遥控配电板 
      70. 红外遥控电源开关 
      71. 简易实用的遥控器 
      72. 微型强力遥控器 
      73. 射频遥控开关 
      74. 微型遥控器   
      75. 能应答的遥控器   
      76. 单路双通道电源遥控开关   
      77. 双路遥控器 
      78. 四通道红外遥控器 
      79. 四通道比例遥控设备 
      80. 性能优异的电机比例驱动电路 
      81. 四通道遥控开关 
      82. 四路红外遥控器 
      83. 243路数字比例遥控电路 
      84. 现代家庭自动化遥控系统(一) 
      85. 现代家庭自动化遥控系统(二) 
      五、计数器、编解码器和密码锁 
      86. 可逆计数器 
      87. 可编程的计数统计控制器   
      88. 简易编译码电路   
      89. 多功能密码控制器 
      90. 两种实用的密码控制器 
      91. 密码控制器   
      92. 开关解密游戏机 
      93. 简易电话密码锁   
      94. 触摸式数字密码锁 
      95. 双触摸点数字密码锁 
      96. 电子密码锁开合器   
      97. 红外遥控密码锁 
      98. 用YYH308制作的密码锁 
      99. 电子密码锁的设计要点 
      门铃报警类 
      100. 简易对讲门铃 
      101. 带闪光的音乐门铃 
      102. 遥控电视门铃 
      103. 感应式自动门铃   
      104. 门控音乐门铃 
      105. 叮咚和鸟鸣声响门铃 
      106. 双音电子门铃 
      107. 触摸双音门铃 
      108. 自动问候电路 
    展开全文
  • 电子设计从这开始——51单片机25个作品

    万次阅读 多人点赞 2020-02-18 20:00:08
    这是大二我做某实验室管理员,为了方便自己管理整理,都是一些51单片机作品,适合给刚学完51单片机的新手练手 一目录 1基于51单片机的火灾温度烟雾报警器 2基于51单片机的声光电子琴 3基于51单片机的音乐喷泉 4...

            这是我大二做某实验室管理员,为了方便自己管理整理,都是一些51单片机的小作品,适合给刚学完51单片机的新手练手!

                  时间好快,目前我已经研二了,没有想到底下会有这么多评论,谢谢各位学弟学妹捧场!我在这统一回复,这些是我总结的可以用来练手的关于51单片机的小项目,不过我自己没有做过,真的没有资料。          

    一目录

    1基于51单片机的火灾温度烟雾报警器

    2基于51单片机的声光电子琴

    3基于51单片机的音乐喷泉

    4基于51单片机的智能温控风扇

    5基于51单片机的超声波测距

    6基于51单片机的无线温湿度控制系统设计

    7基于51单片机脉搏心率计

    8.基于51单片机led音乐频谱

    9.基于51单片机的智能充电器

    10.基于51单片机的贪吃蛇游戏

    11.基于51单片机的电子秤

    12.基于51单片机的视力保护器

    13.基于51单片机防人水位检测报警系统

    14.基于51单片机的声光控制器设计

    15.基于51单片机的红外计数器

    16.基于51单片机的自行车码表设计

    17.基于51单片机的计算器的设计

    18.基于51单片机的酒精浓度测试仪设计

    19.基于51单片机的智能台灯设计

    20.基于51单片机的卫星定位

    21.基于51单片机防尘PM2.5灰尘设计

    22.基于51单片机的无线音乐门铃

    23基于51单片机的短信收发控制器

    24.基于51单片机的智能插座定时开关设计

    25.基于51单片机的4*4*4单片机的光立方设计

     

    二.作品参考图

     

    1基于51单片机的火灾温度烟雾报警器

     

     

     

     

     

    2基于51单片机的声光电子琴

     

     

     

     

    3基于51单片机的音乐喷泉

     

     

     

     

    4基于51单片机的智能温控风扇

     

     

     

     

    5基于51单片机的超声波测距

     

     

    6基于51单片机的无线温湿度控制系统设计

    7基于51单片机脉搏心率计

    8.基于51单片机led音乐频谱

    9.基于51单片机的智能充电器

    10.基于51单片机的贪吃蛇游戏

    11.基于51单片机的电子秤

    12.基于51单片机的视力保护器

    13.基于51单片机防人水位检测报警系统

    14.基于51单片机的声光控制器设计

    15.基于51单片机的红外计数器

    16.基于51单片机的自行车码表设计

    17.基于51单片机的计算器的设计

    18.基于51单片机的酒精浓度测试仪设计

    19.基于51单片机的智能台灯设计

    20.基于51单片机的卫星定位

    21.基于51单片机防尘PM2.5灰尘设计

    22.基于51单片机的无线音乐门铃

    23基于51单片机的短信收发控制器

     

    24.基于51单片机的智能插座定时开关设计

     

    25.基于51单片机的4*4*4单片机的光立方设计

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 1.基于51单片机用LCD1602实现分-秒计时。 2.按键控制分-秒的调整。 3.能实现整时报时的功能(蜂鸣器响)。 4.了解下载模块、下载原理。 5.PCB板的绘制及焊接(包括下载模块)。 6.设计思路以及实现原理。 7....

    基本要求:
    1.基于51单片机用LCD1602实现分-秒计时。
    2.按键控制分-秒的调整。
    3.能实现整时报时的功能(蜂鸣器响)。
    4.了解下载模块、下载原理。
    5.PCB板的绘制及焊接(包括下载模块)。
    6.设计思路以及实现原理。
    7.收获及以后的学习计划。
    ///
    关于此次的任务,首先我们要了解一下LCD1602的一些知识以及51单片机中的定时器功能,以下是我个人在写程序时用到的知识点。

    LCD1602

    1. 引脚说明
      1—VSS—GND
      2—VDD—VCC
      3—V0—LCD偏压输入
      4—RS—数据/命令选择端(H/L)
      5—R/W—读写控制信号(H/L)
      6—E—使能信号
      7—D0—Data I/0
      8—D1—Data I/0
      9—D2—Data I/0
      10—D3—Data I/0
      11—D4—Data I/0
      12—D5—Data I/0
      13—D6—Data I/0
      14—D7—Data I/0
      15—BLK—背光源负极
      16—BLA—背光源正极

    2. 基本操作时序:
      1.读状态:输入:RS=L,RW=H,E=H; 输出:D0~7=状态字
      2.写指令:输入:RS=L,RW=L,D0~7=指令码,E=高脉冲;输出:无
      3.读数据:输入:RS=H,RW=H,E=H;输出:D0~7=数据
      4.写数据:输入:RS=H,RW=L,D0~7=数据,E=高脉冲;输出:无

    3. 显示模式:
      1.LCD上有两行显示,第一行从0x80开始显示光标,第二行从0x80+0x40位开始显示光标。
      2.LCD上的数据是以ASCⅡ码的形式显示的,故在写数据时要加上0x30。

    51单片机的定时器
    51单片机中的定时或计数器是根据机器内部的时钟或是外部的脉冲信号对寄存器中的数据加1。
    初始化程序完成以下工作:
    1.对TMOD赋值,以确定T0和T1的工作方式;
    2.计算初值,并将其写入TH0、TL0或TH1、TL1;(即定时器的起点,终点到65536,65536-50000即为50ms)
    3.中断方式时,则对EA赋值,开放定时器中断;
    4.使TR0或TR1置位,启动定时器定时。
    由于不会自动装载初值,故进入中断后要设置初值。
    ///
    代码

    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    	
    sbit RS=P2^6;
    sbit RW=P2^5;
    sbit E=P2^7;
    sbit beep=P1^5;
    sbit key1=P3^2;
    sbit key2=P3^3;
    uchar k=0,t=0,s=0,shi=0,ge=0,f,w=1;
    void delay(uint c)    //延时50um
    { 
    	uint a,b;
    	for(a=c;a>0;a--)
    	for(b=19;b>0;b--);
    }
    
    void lcd_mang()   //判忙
    {
    	RS=0;
    	RW=1;
    	E=1;
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	while(P0&0x80);//结果是1,死循环;结果是0,不忙
    	E=0;
    }
    void w_lcd(uchar com,uchar i)   // when i=0, write command;when i=1,write number.
    {
    	E=0;
    	RS=i;
    	RW=0;
    	delay(2);
    	P0=com;
    	delay(5);
    	E=1;       //1:read the info  0:do the command
    	delay(10);
    	E=0;
    }
    
    void init()   //restart 初始化
    {
    	delay(300);
    	w_lcd(0x38,0);
    	delay(100);
    	w_lcd(0x38,0);
    	delay(100);
    	w_lcd(0x38,0);
    	w_lcd(0x38,0);
    	w_lcd(0x08,0);
    	w_lcd(0x01,0);  //clear
    	w_lcd(0x06,0);  //point to the next
    	w_lcd(0x0C,0);  //show open & pointer 
    	TMOD=0x01;
    	TH0=(65536-50000)/256;  // get the integer part    in order to get the initial value 50ms
    	TL0=(65536-50000)%256;  // get the remainder part
    	EA=1;                   //turn on the general intrup switch
    	ET0=1;                  //turn on timer intrup
    	TR0=1;  	          //start timer 0
    	EX0=1;     //开外部中断0
    	IT0=0;     //低电平触发
    	EX1=1;     //开外部中断1
    	IT1=0;     //低电平触发
    }
    
    void w_sg(uchar add,uchar x)
    {
    	ge=x%10;
    	shi=x/10;
    	w_lcd(0x80+add,0);    
    	w_lcd(0x30+shi,1);
    	w_lcd(0x80+add+1,0);    
    	w_lcd(0x30+ge,1);
    }
    
    void timer0 () interrupt 1
    {
    	TH0=(65536-50000)/256;  
    	TL0=(65536-50000)%256;   //重装载值50ms
      k++;
    
    }
    
    void int0 () interrupt 0   //按键1控制分加1
    {
    	if(key1==0)
    	{
    		delay(500);
    		if(key1==0)
    		{
    			s=s+1;
    			if(s>=60)        分为50以上时 加1回到个位
    			{
    				s=s-60;
    			}
    		}
    	}
    	while(!key1);
    }
    
    void int1 () interrupt 2   //按键2控制秒加10
    {
    		if(key2==0)
    	{
    		delay(500);
    		if(key2==0)
    		{
    			t=t+10;
    		if(t>=60)          //秒为50以上时 加10回到个位
    			{
    				t=t-60;
    				s++;
    			}
    		}
    	}
    	while(!key2);
    }
    
    void xianshi()
    {
    	if(k==20)
    	{
    			k=0;
    			t++;
        if(t>=60)
    		{
    			f=1;    //f=1时蜂鸣器响
    			while(f==1)
    		{
    			while(1)
    			{
    				for(w=0;w<100;w++)
    				{
    					beep=~beep;
    					delay(5);
    				}
    				f=0;
    				if(f==0)
    				break;
    			}
    			beep=1;
    		}
    			t=0;
    			s++;
    			if(s>=60)
    			{
    				s=0;
    			}
    		}
    	}
    	  lcd_mang();
    		w_sg(6,s);          //显示分
        w_lcd(0x80+8,0);    //显示 “:”
    	  w_lcd(0x3A,1);
    		w_sg(9,t);          //显示秒
    }
    
    void main()
    {
      init();  //lcd初始化以及开定时器
    //	int0_(); //中断 按键
    	while(1)
    	{
    	  xianshi();
    
    	}
    }
    

    ///
    个人遇到的问题总结
    1.在写代码时,一开始采用数组的方式来分别改变分秒的个位和十位数字,但是变量太多比较麻烦。后来采用取整部(a/10)对应十位和取余部(a%10)对应个位的方法来得出秒值(0<=a<60),每秒a加一。分同理。
    2.对于蜂鸣器不响的问题,采用多次取反延时,以此给蜂鸣器一个相对稳定的脉冲。具体见蜂鸣器:https://baike.baidu.com/item/蜂鸣器/3326617
    3.DXP中,一开始尝试自己建库,画了一个之后感觉太麻烦了而且时间来不及就放弃了,直接使用了老师的库和软件中原有的库,这也就导致了焊好板后发现电位器的接线是错误的,封装和实物的引脚并没有对应,所以下次最好还是要自己建库,并在接入元器件时要了解其工作原理和元器件的好坏。
    4.在PCB中,第一次布局布线的时候感觉很麻烦;第二次尝试先在纸上画出布线方式并按照各个模块来分布,比第一次要方便;第三次布局时,先将各板块置于与单片机对应的引脚附近,将VCC和GND部分线路尽量放在外围,这样尽量避免了交叉线的出现,布线时,发现所有的VCC和GND都要连通,所以先将VCC、GND分别接好,各板块的布线遇到线路的阻挡时,可以点中该引脚查看是否有其他高亮的引脚将其接入电路中。
    5.PCB板中,要注意线不能太细,焊盘不能太小,否则洗出来的板子会不能用。在印板子时,由于我们这次画的是单面板,所以复印时不能用镜像,在复印之前一定要仔细想想,不能操之过急。
    6.布局时要想想是否合理,会不会出现电源口处插不了电源线的问题,LCD会不会插不上去,电位器怎么放合理…
    ///
    不足之处
    本次任务实际上并没有达到要求,并且还是太过于依赖已存在的,缺少思考过程,有一种只是为了完成任务的感觉,而且时间分配不合理。

    展开全文
  • 基于51单片机电子时钟

    万次阅读 多人点赞 2020-07-23 20:41:02
    1 基于51单片机用LCD1602实现时-分的显示 2. 按键控制时-分的调整 3. 能实现整时报时的功能(蜂鸣器响) 4. 闹钟模式 5.按键切换模式(模式一:时-分显示,模式二:60秒倒计时) 一、设计思路: 主体: 通过外部中断...

    1 基于51单片机用LCD1602实现时-分的显示
    2. 按键控制时-分的调整
    3. 能实现整时报时的功能(蜂鸣器响)
    4. 闹钟模式
    5.按键切换模式(模式一:时-分显示,模式二:60秒倒计时)

    一、设计思路:
    主体:
    通过外部中断0来控制mod值;mod=0,1.2,3分别对应时钟模式,调整模式,闹钟设置模式,一分钟倒计时模式。
    细节:
    mod0
    通过定时计数器,每一秒增加变量秒(s),每60秒,增加1分(min)并且s置0,每60min,增加1小时h,当h>23,h=0;进行一天循环
    mod1
    按键控制增加min,h和s制0
    mod2
    另外设置变量min1,h1,当min=min1,h=h1时蜂鸣器响
    mod3
    设置变量daojishi=60, 通过定时计数器,每一秒daojishi减1,当daojishi<0时,蜂鸣器响
    另外:
    1.设置外部中断2,关闭蜂鸣器
    2.时间发送一次只能发送一个位

    程序:

    #include<reg52.h>
    //K1后K3加分钟,K4加时间,K2加秒,K1进入闹钟设置,K2退出
    //K2关闭闹钟
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    #define data8b P1
    
    sbit K1=P3^2;               //外部中断0
    sbit K2=P3^3;               //外部中断1
    sbit K3=P3^0;
    sbit K4=P3^1;
    
    sbit BUZ=P2^4;       //蜂鸣器,0响
    sbit RW=P2^5;        //4脚,数据(1)or命令(0)
    sbit RS=P2^6;        //5脚,读(1)写(0)
    sbit E=P2^7;         //6脚,使能信号
    
    u8 code dat1[]={0X30,0X31,0X32,0X33,
    	                               0X34,0X35,0X36,0X37,
    	                               0X38,0X39};
    
    void delay(u16 i)      //延时函数
    {
    	while(i--);
    }
    
    void open012()   //打开中断0,1,定时器中断0
    {
    	TMOD|=0X01;   //选择为定时器0模式,工作方式1
      
    	
    	ET0=1;        //打开定时器0中断允许
    	
    	EA=1;        //打开总中断
    	
    	TR0=1;       //打开定时器			
    	
    	EX0=1;              //打开外部中断0
    	IT0=1;             //边沿触发方式
    	EX1=1;              //打开外部中断1
    	IT1=1;             //边沿触发
      
    }
    
    
    void wrm(u8 dat)              //写入命令
    {
    	delay(1000);
    	RS=0;
    	RW=0;
    	E=0;
    	data8b=dat;
    	E=1;
    	delay(1000);
    	E=0;
    }
    
    
    void wrd(u8 dat)             //写入数据
    {
    	delay(1000);
    	RS=1;
    	RW=0;
    	E=0;
    	data8b=dat;
    	E=1;
    	delay(1000);
    	E=0;
    }
    
    void zero()
    {
    	wrm(0X38);                 //八位数据,两行显示,5*7
    	wrm(0X0c);                  //无光标,打开显示
    	wrm(0X06);                  //光标右移,屏幕不移动
    	wrm(0X01);                  //清屏
    	wrm(0X80);                  //设置数据指针起点
    }
    
    u8 fg=0,sg=0,bfg=0,bsg=0;
    u16 i=0;
    u8 s=0;
    u8 mod=0;
    char dingshi;
    bit bell=0;
    bit zanting=1;
    
    void fangsong()
    {
      wrd(dat1[sg/10]);                 //时十位
    	wrd(dat1[sg%10]);                 //时个位
    	wrd(0x3A);                     //:
    	wrd(dat1[fg/10]);                 //分十位
    	wrd(dat1[fg%10]);                 //分个位
    	wrd(0x3A);                     //:
    	wrd(dat1[(s/10)]);                 //秒十
    	wrd(dat1[(s%10)]);                 //秒个
    }
    
    
    void fangsong1()
    {
    	wrm(0X80);   
      wrd(dat1[sg/10]);                 //时十位
    	wrd(dat1[sg%10]);                 //时个位
    	wrd(0x3A);                     //:
    	wrd(dat1[fg/10]);                 //分十位
    	wrd(dat1[fg%10]);                 //分个位
    	wrd(0x3A);                     //:
    	wrd(dat1[(s/10)]);                 //秒十
    	wrd(dat1[(s%10)]);                 //秒个
    }
    void chuli()
    {
    	if(fg==60)
    	{
    		sg++;
    		fg=0;
    	}
    
    	if(sg==24)
    	{
    	
    		sg=0;
    	}
    	
    }
    
    
    
    void main()
    {
    	u8 shijian;
    	open012();
    	zero();
    	chuli();
    	fangsong();
    	shijian=100;
    	
    	
    	while(1)
    	{
    		while(mod==0)
    	{
    		EX1=1;              //打开外部中断1
    		if(s==60)
    		 {
    			 fg++;       //60秒转化为1分钟
    			 s=0;
    		 }
    				chuli();
    				if((fg==0)&&(shijian!=sg))
    				 {
    				  BUZ=0;
    					shijian=sg;
    				 }
    				fangsong1();
    				if((BUZ==0)&&(bell==0))
    			  {
    				delay(1000);
    				BUZ=1;
    			  }
    			if((fg==bfg)&&(sg==bsg)&&(bell==1))
    				BUZ=0;
    			else BUZ=1;
    			}
    	
    	
    			
    			while(mod==1)
    		{
    			EX1=0;              //关闭外部中断1
    			zero();
    	    fangsong();
    			if(K3==0)
    			  {
    				  delay(1000);
    				  if(K3==0)
    					  fg++;
    			   }
    			if(K4==0)
    			   {
    				  delay(1000);
    				  if(K4==0)
    					 sg++;
    			   }
    				 if(K2==0)
    			   {
    				  delay(1000);
    				  if(K2==0)
    					 s=0;
    			   }
    				 if(fg>59)
    				 {
    					 fg=0;
    				 }
    				  if(sg>23)
    				 {
    					 sg=0;
    				 }
    				 if(s>=59)
    				 {
    					 s=0;
    				 }
    	     }
    		
    			 
    			 
    			 while(mod==2)   //设置闹钟
    		{
    	    if(bfg==60)
    	    {
    		    bsg++;
    		    bsg=0;
    	    }
    	
    	    if(bsg==24)
    	    {
    		     bsg=0;
    	     }
    	    zero();
    			wrd(0x20);
    			wrd(0x20);
    			wrd(0x20);
    		  wrd(dat1[(bsg/10)]);                 //时十位
    	    wrd(dat1[(bsg%10)]);                 //时个位
    	    wrd(0x3A);                     //:
    	    wrd(dat1[(bfg/10)]);                 //分十位
    	    wrd(dat1[(bfg%10)]);                 //分个位
    			 if(K3==0)
    			{
    				delay(1000);
    				if(K3==0)
    					bfg++;
    			}
    			if(K4==0)
    			{
    				delay(1000);
    				if(K4==0)
    					bsg++;
    			}
    			bell=1;
    			zero();
    }
    		
    while(mod==3)
    {
    	while(zanting)
    	{
    	dingshi=60;
    	EX1=1;              //打开外部中断1
    	wrm(0X80);   
    	 wrd(dat1[(dingshi/10)]);                 //时十位
    	 wrd(dat1[(dingshi%10)]);            	//时个位
       }
       wrm(0X80);   
    	 wrd(dat1[(dingshi/10)]);                 //时十位
    	 wrd(dat1[(dingshi%10)]);            	//时个位	
    	while(dingshi<0)
    	{
    		wrm(0X80);   
    		 wrd(dat1[0]);                 //时十位
    	   wrd(dat1[0]);            	//时个位
    		BUZ=0;
    	}
    }
    }
    }
    
    void time0() interrupt 1
    {
       TH0=0XFC;	     //给定时器赋初值,定时1ms
    	 TL0=0X18;
    	 i++;
    	 if(i==1000)     //ms转化为s
    	 {
    		i=0;
    		 s++;
    		 dingshi--;
    	 }	
    }
    
    void key1() interrupt 0     //外部中断0,调整时间
    {
    	delay(1000);
    	if(K1==0)
    	  { 
    		  mod++;
    			while(!K1);
    	  }
    
    if(mod>3)
    {
    	mod=0;
    }
    	 zero();
    }
    
    void naozhong()  interrupt 2                     //开关闹钟
    {
    	if(K2==0)
    		{
    			delay(1000);           //消抖
    				if(K2==0)
    					{
    						bell=0;
    						BUZ=1;
    						zanting=~zanting;
    					}                       //关闭蜂鸣器
    						while(!K2);          //确认按键松开
         }
    }
    
    
    
    

    在这里插入图片描述

    二、收获
    1.更熟练掌握了定时器中断和外部中断的使用
    在这里插入图片描述

    在这里插入图片描述

    可以通过打开和关闭外部中断使同一个按键实现不同的功能

    2.了解到了一点寄存器操作

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    3.中断配置小结
    外部中断
    在这里插入图片描述
    定时器中断
    在这里插入图片描述

    串口通信
    在这里插入图片描述
    4.更熟练使用proteus
    制作了一个小型软件开发版
    在这里插入图片描述

    5.学会了如何学习一个新元器件(LCD1602)
    1.看说明书,重点是看时序图,真值表等
    2.按照时序图写程序
    3.一二都不成立时,查找相关资料
    6.下载原理
    单片机的烧写原理:
    单片机烧写,又称为单片机程序下载、烧录等,本质上是单片机和PC机按照芯片厂家规定的编程协议,通过芯片厂家规定的接口,把已编译好的程序传输到单片机,单片机把数据存储到自身存储器中。
    理解这个原理需要知道几个知识点:
    单片机内部是有程序的,是出厂时固化在硬件中,用户无法修改的(这也会被认为它内部没有程序),这些程序可以调用各种通信接口、内部存储器等;
    可以下载的通信接口:JTAG,SPI,UART,usb等;(还有很多可以扩展485、以太网等)
    编程协议:一般大厂都会公开的,在芯片的专用技术手册中会有;
    存储器:有很多种,掩膜,EPROM,EEROM,flash等寿命不一样,掩膜只能一次,而且要工厂做,flash擦写次数10000+;
    可以这样比喻性的理解:单片机就是电脑的主板,我们写的程序就是操作系统,主板里面装入引导操作系统的基本程序,下载程序就是给电脑装系统!

    7.其他
    1.理解了现在电子表的操作原理
    2.学会了借助现成品(电子表)作参考,写程序
    3.懂得了与人交流的重要性(受王同学的启发,完善了原有程序)

    三.后期计划
    1、继续32的学习
    2、练习焊功
    3、继续51其他外设的学习
    4、按兴趣学习电路、模电、数电、DXP等相关知识

    展开全文
  • 51单片机最小系统的制作

    万次阅读 2018-02-04 21:12:09
    本文将介绍如何自制一个51单片机最小系统及一些附加模块。最终制成的系统将具有烧录程序,运行程序等功能。 先放两张张最终成品如下  ​  (正面)  (反面--锡接走线法) 提醒读者,下载口的布局...
  • 经典51单片机精品设计合集

    万次阅读 多人点赞 2018-08-23 13:41:08
    51单片机作为基础入门的单片机应用十分广泛,一直以来基于51单片机的作品就层出不穷,推陈出新,有一段时间没有给大家整理关于51单片机的作品了,今天给大家分享电路城上最新的基于51单片机的作品,尤其是智能家居...
  • 基于51单片机的无线遥控器制作

    千次阅读 多人点赞 2020-01-04 19:33:52
    基于51单片机的无线遥控器制作 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。到电话,玩具,手机,各类刷卡机,电脑键盘,彩电,冰箱,空调,电磁炉,大到汽车,工业自动控制,...
  • 2. 《基于51单片机8音键电子琴DIY制作》 3. 《基于51单片机的篮球计分器》 4. 《LED数码管显示数字温度计》 5. 《基于51单片机1602万年历》 6. 《基于51单片机12864万年历温度采集报警》 7. 《基于STC单片机...
  • 51单片机最小系统的制作和程序烧录

    万次阅读 2017-09-06 13:18:57
    这篇博客就来分享一下51单片机最小系统的制作以及怎么下载程序 首先准备的材料有:一块板子,一块89c51/52的芯片,一个51芯片插座,12MHZ的晶振,一个10的电阻,一个10uf的电解电容 两个20-33pf的瓷片电容,线...
  • 单片机趣味小制作 很多简单的程序

    热门讨论 2020-07-27 23:33:28
    单片机趣味小制作单片机趣味小制作单片机趣味小制作单片机趣味小制作单片机趣味小制作
  • 51单片机最小系统板制作过程

    万次阅读 2020-07-21 23:15:19
    关注【电子开发圈】微信公众号,一起学习吧!...电子DIY、Arduino、51单片机、STM32单片机、FPGA…… 电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机…… 点击链接,免费下载100G+电子设计学习资料! ...
  • 利用51单片机制作电子时钟

    千次阅读 2015-05-29 22:14:39
    STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的
  • 基于51单片机的简易计算器制作

    万次阅读 2018-05-08 23:16:13
    基于51单片机的简易计算器制作 51单片机可以实现的功能很多,今天笔者介绍一种使用4*4矩阵键盘和八位共阴数码制作的简易计算器。数码管使用的是CL3641AH。原理图如下: S15 S11 S7 S3分别是4,5,6,- S14 S10 S6 ...
  • 51单片机自动浇水系统/51单片机自动浇花系统 整个设计由51单片机模块、湿度传感器模块(土壤湿度传感器或者温度传感器或者温湿度传感器,都可以)、lcd1602液晶显示模块等组成,实现智能浇花和智能浇水功能。该系统...
  • 基于51单片机的指纹密码锁

    万次阅读 多人点赞 2019-01-22 21:36:39
    本次分享的是一款基于51单片机的指纹识别电子密码锁系统,该系统以STC89C52单片机作为模块核心,通过串口通信控制指纹模块AS608实现录取指纹并存储指纹数据,并通过LCD12864液晶显示屏比对流程及效果,辅以直流继电...
  • 51单片机最小系统制作笔记

    千次阅读 2014-04-26 23:33:50
    原文地址:51单片机最小系统制作笔记作者:忘忧角落 上面所示是51系列单片机最小系统全家福照片,组装完成后的照片如下:  本电路各输入、输出脚全部用插针引出,可以连接外围电路进行单片机电路的实验,芯片...
  • 51单片机只要用51单片机最小系统即可,可以自己制作也可以上淘宝买现成的零部件。 电机驱动模块主要是用于给电机供给稳定的电压,同时电机也是通过驱动模块与51单片机相连,进而能通过51单片机控制电机的正转与反转...
  • 基于51单片机电子温度计系统的设计与实现

    千次阅读 多人点赞 2018-10-24 09:01:55
    设计一个基于51单片机电子温度计系统,其采用STC12C5A60S2芯片作为控制中心,DS18B20温度传感器为测温元件,LCD为显示器件。硬件设计部分包括温度传感电路设计、温度控制电路设计及显示电路设计;软件设计部分包括...
  • 51单片机电子制作------篮球比赛计分器

    千次阅读 热门讨论 2019-08-04 19:17:38
    51单片机电子制作------篮球比赛计分器 作者:李剀 出处:https://blog.csdn.net/Kevin_8_Lee 或者 https://www.cnblogs.com/kevin-nancy/ 欢迎转载,但也请保留上面这段声明。谢谢!(上面两个都是我的博客,只是...
  • 《新概念51单片机C语言教程:入门、提高、开发、拓展全攻略》从实际应用入手,以实验过程和实验现象为主导,循序渐进地讲述51单片机C语言编程方法以及51单片机的硬件结构和功能应用。全书共分5篇,分别为入门篇、内...
1 2 3 4 5 ... 20
收藏数 2,346
精华内容 938
关键字:

电子小制作51单片机