找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 32971|回复: 202
打印 上一主题 下一主题
收起左侧

基于DS1302的数字时钟设计 使用595和数码管显示

  [复制链接]
跳转到指定楼层
楼主
本作品采用STC15W1K16S单片机和DS1302设计,配合B站上传的视频更佳。
B站搜索基于DS1302的数字时钟设计(UP凌净清河)即可查到相关视频(预计2018年6月30日下午会审核完毕)。

主要亮点:
1.时间按位设置
2.周数自动计算
3.对输入的日期有严格的合法性判断
4.数码管单个位闪烁效果
次要亮点:
1.较少的单片机IO口占用
2.38译码器转24线译码使用


请注意!为防止低成本盗用(虽然写的不怎么样),展示出的代码删去部分函数(和语句),在附件中有完整版。





  1. /*##############################################################################################
  2. 设计名称:基于DS1302的数字时钟
  3. 设计者:清河

  4. 平台:STC15W1K16S
  5. 硬件部分
  6. 数码管显示:位选使用74HC138改为2-4线译码、段选使用74HC573提高带载能力
  7. 74HC595静态显示:使用74HC595驱动一位共阴极数码管静态显示当前星期
  8. 独立按键:共4个,用于进行各项调整
  9. DS1302:配电池,实现断电走时
  10. LED指示灯:指示当前所处状态和闹钟开启与否
  11. 蜂鸣器:使用5V有源蜂鸣器,提供闹钟功能

  12. 软件部分
  13. 使用定时器0实现对DS1302数据的定时读取,间隔500ms,以便更新当前的显示值,读取到的值以全局变量形式储存
  14. 可以考虑使用定时器1实现数码管中间秒指示的闪烁
  15. ##############################################################################################*/

  16. #include<STC15.H>
  17. #include<intrins.h>
  18. sbit SCLK=P1^6;
  19. sbit RST=P5^4;
  20. sbit DSIO=P1^7;
  21. sbit SER=P1^2;
  22. sbit RCLK=P1^3;
  23. sbit SRCLK=P1^4;
  24. sbit S1=P1^0;
  25. sbit S2=P1^1;
  26. sbit bell=P3^7;
  27. sbit SET=P3^6;
  28. sbit UP=P3^5;
  29. sbit DOWN=P3^4;
  30. sbit SHOW=P3^3;
  31. sbit setled=P3^1;
  32. sbit clkled=P3^0;

  33. unsigned char code smgduan[11]={0x3f,0x0a,0x57,0x4f,0x6a,0x6d,0x7d,0x0b,0x7f,0x6f,0x00};
  34. unsigned char code smgduan_dp[12]={0xbf,0x8a,0xd7,0xcf,0xea,0xed,0xfd,0x8b,0xff,0xef,0x00,0x80};
  35. unsigned char code hcwei[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
  36. unsigned char code READ_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
  37. unsigned char code WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
  38. unsigned char TIME[7]={0,0x34,0x19,0x17,0x06,0x07,0x18};
  39. unsigned int time_trans[7]={0,0,0,0,0,0,0};
  40. unsigned char display_time[4]={0,0,0,0};
  41. unsigned char display_monthday[4]={1,1,1,1};
  42. unsigned char display_year[4]={2,2,2,2};
  43. unsigned char display_second[4]={0,0,9,9};
  44. unsigned char display_week=0;
  45. unsigned char clock[4]={0,8,3,0};
  46. unsigned char set_time[4]={0,0,0,1};
  47. unsigned char set_monthday[4]={0,0,0,2};
  48. unsigned char set_year[4]={0,0,0,3};
  49. unsigned char set_clock[4]={0,8,3,0};
  50. unsigned char set_write[7]={0,0,0,0,0,0,0};
  51. bit flag_display=1;
  52. bit flag_SET=0;
  53. bit flag_clock=0;
  54. bit flag_clock_arrive=0;
  55. bit flag_exit=0;
  56. unsigned char display_mod=0;
  57. unsigned char set_mod=0;
  58. unsigned char flashbit=0;
  59. unsigned char t0_cnt=0
  60. unsigned int year_temp;

  61. void Ds1302Write(unsigned char addr, unsigned char dat)
  62. {
  63.     unsigned char n;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1; _nop_();
  64.     for (n=0; n<8; n++){DSIO = addr & 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}
  65.     for (n=0; n<8; n++){DSIO = dat & 0x01;dat >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}    RST = 0;_nop_();
  66. }

  67. unsigned char Ds1302Read(unsigned char addr)
  68. {
  69.     unsigned char n,dat,dat1;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1;_nop_();
  70.     for(n=0; n<8; n++){DSIO = addr & 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();}_nop_();
  71.     for(n=0; n<8; n++){dat1 = DSIO;dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0;_nop_();}
  72.     RST = 0;_nop_();    SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;   
  73. }

  74. void Ds1302Init()
  75. {unsigned char n;Ds1302Write(0x8E,0X00);for(n=0;n<7;n++){Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);}Ds1302Write(0x8E,0x80);}

  76. void Ds1302ReadTime()
  77. {unsigned char n;for(n=0;n<7;n++){TIME[n]=Ds1302Read(READ_RTC_ADDR[n]);}}

  78. void TimeReset()
  79. {
  80.     unsigned char n;TR0=0;
  81.     Ds1302Write(0x8E,0X00);for (n=0; n<7; n++){Ds1302Write(WRITE_RTC_ADDR[n],set_write[n]);}
  82.     Ds1302Write(0x8E,0x80);for(n=0;n<4;n++){clock[n]=set_clock[n];}TR0=1;
  83. }

  84. void delay(unsigned int cnt)
  85. {while(cnt--);}

  86. void hc595send(unsigned char dat)
  87. {unsigned char a;SRCLK=0;RCLK=0;for(a=0;a<8;a++){SER=dat>>7;dat<<=1;SRCLK=1;_nop_();_nop_();SRCLK=0;}RCLK=1;_nop_();_nop_();RCLK=0;}

  88. void time_assign()
  89. {
  90.     display_time[0]=time_trans[2]/10;display_time[1]=time_trans[2]%10;display_time[2]=time_trans[1]/10;display_time[3]=time_trans[1]%10;
  91.     display_monthday[0]=time_trans[4]/10;display_monthday[1]=time_trans[4]%10;display_monthday[2]=time_trans[3]/10;display_monthday[3]=time_trans[3]%10;
  92.     display_year[0]=2;display_year[1]=0;display_year[2]=(time_trans[6]%100)/10;display_year[3]=time_trans[6]%10;
  93.     display_week=time_trans[5];display_second[0]=10;display_second[1]=11;display_second[2]=time_trans[0]/10;display_second[3]=time_trans[0]%10;
  94.     if(flag_display){hc595send(hcwei[display_week]);}else{hc595send(0x00);}
  95.     if(display_time[0]==clock[0]&&display_time[1]==clock[1]&&display_time[2]==clock[2]&&display_time[3]==clock[3]){flag_clock_arrive=1;}else{flag_clock_arrive=0;}
  96. }

  97. void smgdisplay(unsigned char smg_temp[])
  98. {
  99.     unsigned char i;
  100.     for(i=0;i<4;i++)
  101.     {
  102.         switch(i)
  103.         {
  104.             case(0):S1=0;S2=1; break;
  105.             case(1):S1=0;S2=0; break;
  106.             case(2): S1=1;S2=0; break;
  107.             case(3):S1=1;S2=1; break;   
  108.         }
  109.         if(flag_SET)
  110.         {
  111.             switch(set_mod)
  112.             {
  113.                 case 0:P2=smgduan_dp[smg_temp[i]];break;
  114.                 case 1:P2=smgduan[smg_temp[i]];break;
  115.                 case 2:P2=smgduan[smg_temp[i]];break;
  116.                 case 3:P2=smgduan_dp[smg_temp[i]];break;
  117.             }
  118.         }
  119.         else
  120.         {
  121.             switch(display_mod)
  122.             {
  123.                 case 0:P2=smgduan_dp[smg_temp[i]];break;
  124.                 case 1:P2=smgduan[smg_temp[i]];break;
  125.                 case 2:P2=smgduan[smg_temp[i]];break;
  126.                 case 3:P2=smgduan_dp[smg_temp[i]];break;
  127.                 case 4:P2=smgduan_dp[smg_temp[i]];break;
  128.             }
  129.         }
  130.         delay(100);
  131.         P2=0x00;
  132.     }
  133. }

  134. void clockoo()
  135. {
  136.     if(flag_clock&&flag_clock_arrive&&t0_cnt==9){bell=~bell;}else{bell=0;}
  137. }

  138. unsigned char Leap(unsigned int year)
  139. {
  140.     if(year%100==0){if(year%400==0)return 1;else return 0;}else{if(year%4==0)return 1;else return 0;}
  141. }

  142. void sys_init()
  143. {
  144.     setled=1;clkled=1;bell=0;hc595send(0x76);TMOD=0x11;TL0=(65536-50000)/256;TH0=(65536-50000)%256;ET0=1;EA=1;TR0=1
  145. }

  146. void main()
  147. {
  148.     sys_init();
  149.     while(1)
  150.     {
  151.         if(flag_display)
  152.         {
  153.             switch(display_mod)
  154.             {
  155.                 case 0:smgdisplay(display_time);break;
  156.                 case 1:smgdisplay(display_monthday);break;
  157.                 case 2:smgdisplay(display_year);break;
  158.                 case 3:smgdisplay(display_second);break;
  159.                 case 4:smgdisplay(clock);break;
  160.                 default :display_mod=0;break;
  161.             }
  162.         }
  163.         if(SET==0){delay(150);if(SET==0){flag_SET=1;setled=0;}while(!SET);}
  164.         if(!flag_SET)
  165.         {
  166.             if(UP==0){delay(200);if(UP==0){flag_display=~flag_display;}while(!UP);}
  167.             if(DOWN==0){delay(250);if(DOWN==0){flag_clock=!flag_clock;clkled=!flag_clock;}while(!DOWN);}
  168.             if(SHOW==0&&flag_display){delay(200);if(SHOW==0){display_mod++;if(display_mod>4)display_mod=0;}while(!SHOW);}
  169.         }
  170.         else
  171.         {
  172.             while(flag_SET)
  173.             {
  174.                 switch(set_mod)
  175.                 {
  176.                     case 0:smgdisplay(set_time);break;
  177.                     case 1:smgdisplay(set_monthday);break;
  178.                     case 2:smgdisplay(set_year);break;
  179.                     case 3:smgdisplay(set_clock);break;
  180.                     default:set_mod=0;break;
  181.                 }
  182.                 if(UP==0)
  183.                 {
  184.                     delay(200);
  185.                     if(UP==0)
  186.                     {
  187.                         switch(set_mod)
  188.                         {
  189.                             case 0:if(t1_temp==10){if(set_time[flashbit]<9)set_time[flashbit]++;}else{if(t1_temp<9)t1_temp++;}break;
  190.                             case 1:if(t1_temp==10){if(set_monthday[flashbit]<9)set_monthday[flashbit]++;}else{if(t1_temp<9)t1_temp++;}break;
  191.                             case 2:if(t1_temp==10){if(set_year[flashbit]<9)set_year[flashbit]++;}else{if(t1_temp<9)t1_temp++;}break;
  192.                             case 3:if(t1_temp==10){if(set_clock[flashbit]<9)set_clock[flashbit]++;}else{if(t1_temp<9)t1_temp++;}break;
  193.                         }
  194.                     }while(!UP);
  195.                 }
  196.                 if(DOWN==0)
  197.                 {
  198.                     delay(200);
  199.                     if(DOWN==0)
  200.                     {
  201.                         switch(set_mod)
  202.                         {
  203.                             case 0:if(t1_temp==10){if(set_time[flashbit]>0)set_time[flashbit]--;}else{if(t1_temp>0)t1_temp--;}break;
  204.                             case 1:if(t1_temp==10){if(set_monthday[flashbit]>0)set_monthday[flashbit]--;}else{if(t1_temp>0)t1_temp--;}break;
  205.                             case 2:if(t1_temp==10){if(set_year[flashbit]>0)set_year[flashbit]--;}else{if(t1_temp>0)t1_temp--;}break;
  206.                             case 3:if(t1_temp==10){if(set_clock[flashbit]>0)set_clock[flashbit]--;}else{if(t1_temp>0)t1_temp--;}break;
  207.                         }
  208.                     }while(!DOWN);
  209.                 }
  210.                 if(SHOW==0)
  211.                 {
  212.                     delay(200);
  213.                     if(SHOW==0)
  214.                     {
  215.                         if(t1_temp!=10)
  216.                         {
  217.                             switch(set_mod)
  218.                             {
  219.                                 case 0:set_time[flashbit]=t1_temp;t1_temp=10;break;
  220.                                 case 1:set_monthday[flashbit]=t1_temp;t1_temp=10;break;
  221.                                 case 2:set_year[flashbit]=t1_temp;t1_temp=10;break;
  222.                                 case 3:set_clock[flashbit]=t1_temp;t1_temp=10;break;
  223.                             }
  224.                         }
  225.                         flashbit++;
  226.                         if(flashbit>3)flashbit=0;
  227.                     }while(!SHOW);
  228.                 }
  229.                 if(SET==0)
  230.                 {
  231.                     delay(200);
  232.                     if(SET==0)
  233.                     {
  234.                         if(t1_temp!=10)
  235.                         {
  236.                             switch(set_mod)
  237.                             {
  238.                                 case 0:set_time[flashbit]=t1_temp;t1_temp=10;break;
  239.                                 case 1:set_monthday[flashbit]=t1_temp;t1_temp=10;break;
  240.                                 case 2:set_year[flashbit]=t1_temp;t1_temp=10;break;
  241.                                 case 3:set_clock[flashbit]=t1_temp;t1_temp=10;break;
  242.                             }
  243.                         }
  244.                         switch(set_mod)
  245.                         {case 0:
  246.                             if((set_time[0]*10+set_time[1])>24||set_time[0]>2){flag_exit=1;}else{if(set_time[0]==2&&set_time[1]>4){flag_exit=1;}}
  247.                             if((set_time[2]*10+set_time[3])>60||set_time[2]>5){flag_exit=1;}break;
  248.                         case 1:
  249.                             if((set_monthday[0]*10+set_monthday[1])>12||set_monthday[0]>1){flag_exit=1;}
  250.                             else{if(set_monthday[0]==1&&set_monthday[1]>2){flag_exit=1;}if(set_monthday[0]==0&&set_monthday[1]==0){flag_exit=1;}}
  251.                             if((set_monthday[2]*10+set_monthday[3])>31||set_monthday[0]>3){flag_exit=1;}break;
  252.                         case 2:
  253.                             if(set_year[0]!=2||set_year[1]!=0){flag_exit=1;}
  254.                             year_temp=set_year[0]*1000+set_year[1]*100+set_year[2]*10+set_year[3];
  255.                             if(!Leap(year_temp)){if(set_monthday[0]==0&&set_monthday[1]==2&&set_monthday[2]==2&&set_monthday[3]==9){flag_exit=1;}}break;
  256.                         case 3:
  257.                             if((set_clock[0]*10+set_clock[1])>24||set_clock[0]>2){flag_exit=1;}else{if(set_clock[0]==2&&set_clock[1]>4){flag_exit=1;}}
  258.                             if((set_clock[2]*10+set_clock[3])>60||set_clock[2]>5){flag_exit=1;}break;
  259.                         }set_mod++;flashbit=0;
  260.                     }
  261.                     while(!SET);
  262.                     if(flag_exit){flag_exit=0;set_mod=0;flag_SET=0;setled=1;flashbit=0;goto OUT;}else{if(set_mod==4){display_week=week_calculation(set_year,set_monthday);time_transmission();TimeReset();flag_exit=0;set_mod=0;flag_SET=0;setled=1;flashbit=0;goto OUT;}
  263.                     }
  264.                 }
  265.             }
  266. OUT:    _nop_();            
  267.         }clockoo();
  268.     }
  269. }

  270. void GetTime() interrupt 1
  271. {
  272.     TL0=(65536-50000)/256;TH0=(65536-50000)%256;t0_cnt++;
  273.     if(t0_cnt==10){Ds1302ReadTime();time_procressing();time_assign();t0_cnt=0;}
  274. }
复制代码

带注释版在附件中,上面的为无注释紧缩版,代码排版严谨,分级之间使用TAB件,无多余空格,复制到Notpad++中以*.c文件保存可以正常观看。


新矿城学习基地 凌净清河

基于DS1302的数字时钟设计 凌净清河.zip (59.37 KB, 下载次数: 252)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

来自 2#
ID:362076 发表于 2018-7-2 14:25 | 只看该作者
下一页面 发表于 2018-6-30 15:35
谢谢楼主!!想用一下你的电路!!

这个电路是直接焊出来的,没有仿真和原理图,各个部分都是典型电路,没有做什么特殊的改动,按照附件源码的注释连74HC595、74HC138、74HC573、DS1302的线即可。
回复

使用道具 举报

来自 3#
ID:362076 发表于 2018-7-14 01:52 | 只看该作者
songxia8013 发表于 2018-7-13 14:02
没有图,实用性比较差!首先得有图。一般学习者的水平还没达到那么高,没有图,看不懂的!

这位层主所言有理,可该设计只是整合了数码管显示典型电路、DS1302典型电路、按键典型电路,即使是片内资源,也只涉及了两个定时器中断,所以并不算复杂,对于初学者而言,电路部分没有难点。软件部分合并成一个文件,没有使用宏定义和数据类型的重定义,并且排版极为统一严整,注释详略得当,已经极大的考虑了初学者的需要,况且初学者也不能总是停留在初学者的阶段,这样综合一点点的涉及是迟早要尝试的。

对于该设计,也是有很多可以更改和优化的方面,在此为初学者提供几点方向如下(难度由浅入深):
1.尝试使用74HC595替换74HC573驱动数码管以减少对IO口的占用;
2.尝试更换显示方式。由于待显示的数据是放在全局数组中的,所以更改显示方式很容易;
3.尝试优化程序,减少全局变量的使用量,增加程序的耦合度,考虑如何实现利用DS1302制作片外任意时间定时器;
4.尝试将4按键换为ADC键盘。使用TL431A作为参考源,使用片内AD转换器添加一个4*4键盘,并扩展功能使之可以正计时、倒计时、多重闹钟等;
5.尝试依据DS1302和显示电路,添加必要的模块实现无线授时(蓝牙模块)、定时遥控(433M或315M模块)、非接触控制(光耦)等。

另请各位初学者知晓,如有对本程序任何疑问尽可以留言,本人看见必回。
愿与广大初学者共同成长。

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:135835 发表于 2018-6-30 12:46 | 只看该作者
感谢分享,下载学习了。
回复

使用道具 举报

5#
ID:362254 发表于 2018-6-30 15:35 | 只看该作者
谢谢楼主!!想用一下你的电路!!
回复

使用道具 举报

6#
ID:270560 发表于 2018-7-2 16:47 | 只看该作者
来学习咯
回复

使用道具 举报

7#
ID:363332 发表于 2018-7-2 16:58 | 只看该作者
膜拜大神
回复

使用道具 举报

8#
ID:87193 发表于 2018-7-3 10:00 | 只看该作者
感谢分享,下载学习了。
回复

使用道具 举报

9#
ID:359074 发表于 2018-7-4 23:16 | 只看该作者
感谢楼主
回复

使用道具 举报

10#
ID:350006 发表于 2018-7-6 23:34 | 只看该作者
感谢分享,下载学习
回复

使用道具 举报

11#
ID:44072 发表于 2018-7-8 00:51 | 只看该作者
感谢分享,下载学习了。
回复

使用道具 举报

12#
ID:274703 发表于 2018-7-9 19:31 | 只看该作者
6666666
回复

使用道具 举报

13#
ID:368491 发表于 2018-7-10 10:27 | 只看该作者
楼主有心了
回复

使用道具 举报

14#
ID:225054 发表于 2018-7-12 20:18 来自手机 | 只看该作者
谢谢楼主
回复

使用道具 举报

15#
ID:102963 发表于 2018-7-13 14:00 | 只看该作者
很好的设计,新鲜的东西,值得大家学习!
回复

使用道具 举报

16#
ID:102963 发表于 2018-7-13 14:02 | 只看该作者
没有图,实用性比较差!首先得有图。一般学习者的水平还没达到那么高,没有图,看不懂的!
回复

使用道具 举报

17#
ID:249672 发表于 2018-7-13 19:59 | 只看该作者
感谢楼主
回复

使用道具 举报

18#
ID:382530 发表于 2018-8-3 14:15 | 只看该作者
感谢分享
回复

使用道具 举报

19#
ID:385173 发表于 2018-8-11 08:10 | 只看该作者
学习一下
回复

使用道具 举报

20#
ID:283725 发表于 2018-8-12 17:20 | 只看该作者
楼主的键盘是硬件做了防抖了么?
回复

使用道具 举报

21#
ID:362076 发表于 2018-8-13 08:16 | 只看该作者
单片机小小白白 发表于 2018-8-12 17:20
楼主的键盘是硬件做了防抖了么?

虽然有硬件防抖,但是软件部分还是需要短暂的延时,如果不是原理性的问题,就是我电容容值选小了。
回复

使用道具 举报

22#
ID:386381 发表于 2018-8-16 15:05 来自手机 | 只看该作者
楼主太伟了,感谢分亨
回复

使用道具 举报

23#
ID:330970 发表于 2018-8-23 17:47 | 只看该作者
学习!!!!!!!!
回复

使用道具 举报

24#
ID:219871 发表于 2018-8-31 13:40 | 只看该作者
学习一下
回复

使用道具 举报

25#
ID:164988 发表于 2018-9-3 20:46 | 只看该作者
学学595
回复

使用道具 举报

26#
ID:362076 发表于 2018-9-5 12:36 | 只看该作者

74HC595写入函数.zip (660 Bytes, 下载次数: 20)
74HC595按照STC手册上的典型连接方式,修改一下附件中的位定义,调用函数就可以实现对595的控制了。其实很方便。


回复

使用道具 举报

27#
ID:291767 发表于 2018-9-6 22:25 | 只看该作者
需要看一下,谢谢了
回复

使用道具 举报

28#
ID:33544 发表于 2018-9-9 08:40 | 只看该作者
学习一下数码管显示程序
回复

使用道具 举报

29#
ID:393625 发表于 2018-9-11 11:15 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

30#
ID:278299 发表于 2018-10-29 15:21 | 只看该作者
谢谢分享
回复

使用道具 举报

31#
ID:419995 发表于 2018-11-3 10:08 | 只看该作者
感谢楼主
回复

使用道具 举报

32#
ID:408252 发表于 2018-11-8 13:42 来自手机 | 只看该作者
哇,厉害厉害
回复

使用道具 举报

33#
ID:336966 发表于 2018-11-9 21:37 | 只看该作者
楼主 附件在哪里呀?
回复

使用道具 举报

34#
ID:362076 发表于 2018-11-10 11:44 | 只看该作者
豆季四 发表于 2018-11-9 21:37
楼主 附件在哪里呀?

回复之后,就可以在文末可以看到附件了~
回复

使用道具 举报

35#
ID:358930 发表于 2018-11-13 16:18 来自手机 | 只看该作者
凌净清河 发表于 2018-7-2 14:25
这个电路是直接焊出来的,没有仿真和原理图,各个部分都是典型电路,没有做什么特殊的改动,按照附件源码 ...

好好学习,下来研究一下基础训练

评分

参与人数 1黑币 +15 收起 理由
凌净清河 + 15 &gt;v&lt;!!

查看全部评分

回复

使用道具 举报

36#
ID:428841 发表于 2018-11-18 20:01 | 只看该作者
从b站过来的,讲的很详细,学习了

评分

参与人数 1黑币 +11 收起 理由
凌净清河 + 11 给你点黑币用着

查看全部评分

回复

使用道具 举报

37#
ID:424598 发表于 2018-11-20 10:31 来自手机 | 只看该作者
songxia8013 发表于 2018-7-13 14:02
没有图,实用性比较差!首先得有图。一般学习者的水平还没达到那么高,没有图,看不懂的!

新手要从基础学起。不建议用开发板学习。因为线路都走好了。大部分开发板并没有走线说明。

建议用面包板,先从简单的线路,自己接线,这样会学得快。
1.先学无需代码的简单线路
2.学习简单的代码模块
不用学会写,只要学会改,把别人的代码自己边改边注释,慢慢就懂了
3.要舍得花钱,玩单片机很烧钱的

评分

参与人数 2黑币 +55 收起 理由
admin + 40 回帖助人的奖励!
凌净清河 + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

38#
ID:429748 发表于 2018-11-20 10:39 | 只看该作者
要注释版

评分

参与人数 1黑币 +13 收起 理由
凌净清河 + 13 回帖之后就可以看见附件了

查看全部评分

回复

使用道具 举报

39#
ID:46220 发表于 2018-11-23 18:02 | 只看该作者
谢谢楼主,来学习了
回复

使用道具 举报

40#
ID:432831 发表于 2018-11-26 21:14 | 只看该作者
谢谢楼主分享

评分

参与人数 1黑币 +15 收起 理由
凌净清河 + 15 下载补贴15黑币!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表