找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+洞洞板调试DS12C887芯片遇到的问题 附程序

[复制链接]
跳转到指定楼层
楼主
各位大神帮忙看看
问题详述:在进行DS12C887芯片进行调试的时,液晶显示不正常,刚上电,秒表的位置显示|||+(1-9)顺序转,大概循环了有二三十秒的样子又变成正常的数字显示,而且断电之后在重新上电的时间也没有继续走而是从一个随机的时间开始走,而且我手动一下那个887芯片那个洞洞板,时间全部变成了||5:||5:||5(具体现象下图)。不知道是不是887 的芯片坏了。刚开始以为是我把数据传输的脚位给焊接短路了,但是用万用表测量都没有短路,而且所有的线都进行了测试,都是没问题的(程序参考郭天祥)
题外问题:有没有新手获得芯片推荐的地方。
图片描述:实验现象
附录:单片机开发板原理图


刚上电的现象


上电一段之间之后的现象


用手动887这个芯片的现象


单片机源程序如下:
  1. #include <REGX52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. sbit rs=P3^5;
  7. sbit RW=P3^6;
  8. sbit lcden=P3^4;
  9. sbit key1=P3^0;
  10. sbit key2=P3^1;
  11. sbit key3=P3^2;
  12. sbit rd=P3^7;
  13. sbit dscs=P1^4;
  14. sbit dsas=P1^5;
  15. sbit dsrw=P1^6;
  16. sbit dsds=P1^7;
  17. sbit dsirq=P3^3;
  18. sbit beef=P2^3;
  19. uchar code table[]="  2022-04-28 WED";
  20. uchar code table1[]="    09:59:50";
  21. uchar count,key1num,flag,flag1;
  22. void set_time();
  23. void write_ds(uchar add,uchar date);
  24. void set_alarm(uchar ashi,uchar afen,uchar amiao);
  25. uchar read_ds(uchar add);
  26. char shi,fen,miao;
  27. void write_sfm(uchar add,uchar date);
  28. void delay(uint xms)
  29. {
  30.         uint i,j;
  31.         for(i=xms;i>0;i--);
  32.         for(j=110;j>0;j--);
  33. }

  34. void write_com(uchar com)
  35. {
  36.         rs=0;
  37.         RW=0;
  38.         lcden=0;
  39.         P0=com;
  40.         delay(5);
  41.         lcden=1;
  42.         delay(5);
  43.         lcden=0;
  44. }

  45. void write_date(uchar date)
  46. {
  47.         rs=1;
  48.         RW=0;
  49.         lcden=0;
  50.         P0=date;
  51.         delay(5);
  52.         lcden=1;
  53.         delay(5);
  54.         lcden=0;
  55. }


  56. void LCDINIT()
  57. {
  58.         uchar num;
  59.         dula=0;
  60.         wela=0;
  61.         lcden=0;
  62.         write_com(0x38);
  63.         write_com(0x0c);
  64.         write_com(0x06);
  65.         write_com(0x01);
  66.         write_com(0x80);
  67.         for(num=0;num<15;num++)
  68.         {
  69.                 write_date(table[num]);
  70.                 delay(20);
  71.         }
  72.         write_com(0x80+0x40);
  73.         for(num=0;num<12;num++)
  74.         {
  75.                 write_date(table1[num]);
  76.                 delay(5);
  77.         }
  78. }

  79. void init()
  80. {
  81.         EA=1;
  82.         EX1=1;
  83.         IT1=1;
  84.         set_time();
  85.         set_alarm(13,52,00);
  86.         
  87.         
  88.    
  89.    
  90.         write_ds(0x0b,0x26);
  91.         read_ds(0x0c);
  92. }



  93. //void write_ds(uchar add,uchar date
  94. void keyscan()
  95. {
  96.         rd=0;
  97.         if(flag1==1)
  98.         {
  99.                         if(key2==0)
  100.                 {
  101.                         delay(5);
  102.                         if(key2==0)
  103.                         {
  104.                                 while(!key2);
  105.                                 flag1=0;
  106.                         }
  107.                 }
  108.                         if(key3==0)
  109.                 {
  110.                         delay(5);
  111.                         if(key3==0)
  112.                         {
  113.                                 while(!key3);
  114.                                 flag1=0;
  115.                         }
  116.                 }
  117.         }

  118.         if(key1==0)
  119.         {
  120.                 delay(5);
  121.                 if(key1==0)
  122.                 {
  123.                         flag=1;
  124.                         flag1=0;
  125.                         key1num++;
  126.                         while(!key1);
  127.                         
  128.                         if(key1num==1)
  129.                         {
  130.                                 
  131.                                 write_com(0x80+0x40+11);
  132.                                 write_com(0x0f);
  133.                         }
  134.                         if(key1num==2)
  135.                         {
  136.                                 
  137.                                 write_com(0x80+0x40+8);
  138.                                 write_com(0x0f);
  139.                         }
  140.                         if(key1num==3)
  141.                         {
  142.                                 
  143.                                 write_com(0x80+0x40+5);
  144.                                 write_com(0x0f);
  145.                         }
  146.                         if(key1num==4)
  147.                         {
  148.                                 key1num=0;
  149.                                 flag=0;
  150.                                 write_ds(0,miao);
  151.                                 write_ds(2,fen);
  152.                                 write_ds(4,shi);
  153.                                 
  154.                                 
  155.                                 write_com(0x0c);
  156.                         }
  157.                 }
  158.         }
  159.                         
  160.                         if(key1num!=0)
  161.                         {
  162.                                 if(key2==0)
  163.                                 {
  164.                                         delay(5);
  165.                                         if(key2==0)
  166.                                         {
  167.                                                 while(!key2);
  168.                                                 if(key1num==1)
  169.                                                 {
  170.                                                         miao++;
  171.                                                         if(miao==60)
  172.                                                         {
  173.                                                                 miao=0;
  174.                                                         }
  175.                                                         write_com(0x80+0x40+10);
  176.                                                         write_sfm(10,miao);
  177.                                                 }
  178.                                                 if(key1num==2)
  179.                                                 {
  180.                                                         fen++;
  181.                                                         if(fen==60)
  182.                                                         fen=0;
  183.                                                         write_sfm(7,fen);
  184.                                                         write_com(0x80+0x40+7);
  185.                                                 }
  186.                                                 if(key1num==3)
  187.                                                 {
  188.                                                         shi++;
  189.                                                         if(shi==24)
  190.                                                         shi=0;
  191.                                                         write_sfm(4,shi);
  192.                                                         write_com(0x80+0x40+4);
  193.                                                 }
  194.                                         }
  195.                                 }
  196.                                 if(key3==0)
  197.                                 {
  198.                                         delay(5);
  199.                                         if(key3==0)
  200.                                         {
  201.                                                 while(!key3);
  202.                                                 if(key1num==1)
  203.                                                 {
  204.                                                         
  205.                                                         miao--;
  206.                                                         if(miao==-1)
  207.                                                         {
  208.                                                                 miao=59;
  209.                                                                 write_sfm(10,miao);
  210.                                                                 write_com(0x80+0x40+10);
  211.                                                         }
  212.                                                                                                                
  213.                                                 }
  214.                                                 if(key1num==2)
  215.                                                 {
  216.                                                         fen--;
  217.                                                         if(fen==-1)
  218.                                                                 fen=59;
  219.                                                         write_sfm(7,fen);
  220.                                                         write_com(0x80+0x40+7);
  221.                                                 }
  222.                                                 if(key1num==3)
  223.                                                 {
  224.                                                         shi--;
  225.                                                         if(shi==-1)
  226.                                                                 shi=23;
  227.                                                         write_sfm(4,shi);
  228.                                                         write_com(0x80+0x40+4);
  229.                                                 }
  230.                                         }
  231.                         }
  232.                 }
  233.         }
  234. /
  235. /

  236. void write_sfm(uchar add,uchar date)
  237. {
  238.         uchar shi,ge;
  239.         shi=date/10;
  240.         ge=date%10;
  241.         write_com(0x80+0x40+add);
  242.         write_date(0x30+shi);
  243.         write_date(0x30+ge);
  244. }

  245. void write_ds(uchar add,uchar date)
  246. {
  247.         dscs=0;
  248.         dsas=1;
  249.         dsds=1;
  250.         dsrw=1;
  251.         P0=add;
  252.         dsas=0;
  253.         dsrw=0;
  254.         P0=date;
  255.         dsrw=1;
  256.         dsas=1;
  257.         dscs=1;
  258. }

  259. uchar read_ds(uchar add)
  260. {
  261.         uchar ds_date;
  262.         dscs=0;
  263.         dsas=1;
  264.         dsds=1;
  265.         dsrw=1;
  266.         P0=add;
  267.         dsas=0;
  268.         dsds=0;
  269.         P0=0xff;
  270.         ds_date=P0;
  271.         dsds=1;
  272.         dsas=1;
  273.         dscs=1;
  274.         return ds_date;
  275. }


  276. void set_time()
  277. {
  278.         write_ds(4,00);
  279.         write_ds(2,00);
  280. }

  281. void set_alarm(uchar ashi,uchar afen,uchar amiao)
  282. {
  283.         write_ds(1,amiao);
  284.         write_ds(3,afen);
  285.         write_ds(5,ashi);
  286. }
  287. void didi()
  288. {
  289.         beef=0;
  290.         delay(50);
  291.         beef=1;
  292.         delay(100);
  293.         beef=0;
  294.         delay(50);
  295.         beef=1;
  296. }

  297. void main()
  298. {
  299.         LCDINIT();
  300.         
  301.         init();
  302.         
  303.         
  304.         
  305.         while(1)
  306.         {
  307.                 keyscan();
  308.                
  309.                
  310.                 if(flag1==1)
  311.                         didi();
  312.                         
  313.                 if(flag==0)
  314.                 {
  315.                         miao=read_ds(0);
  316.                         fen=read_ds(2);
  317.                         shi=read_ds(4);
  318.                         write_sfm(10,miao);
  319.                         write_sfm(7,fen);
  320.                         write_sfm(4,shi);
  321.                 }

  322.         }
  323.       
  324.         
  325. }

  326. void exter() interrupt 2
  327. {
  328.         uchar c;
  329.         
  330.         flag1=1;
  331.         c=read_ds(0x0c);
  332. }
复制代码

TX-1C增强版原理图.pdf

243.32 KB, 下载次数: 4

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

使用道具 举报

沙发
ID:94031 发表于 2022-5-5 10:05 | 只看该作者
杜邦线接触不良造成。
回复

使用道具 举报

板凳
ID:301191 发表于 2022-5-6 15:45 | 只看该作者
顶一下
回复

使用道具 举报

地板
ID:961087 发表于 2022-5-9 10:24 | 只看该作者
xuyaqi 发表于 2022-5-5 10:05
杜邦线接触不良造成。

你好谢谢回复,就是在调试的过程中我有更换过杜邦线,使用前也都用那个万用表简单的测试了一下,还是一样的现象。所以有点不知道怎么解决了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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