找回密码
 立即注册

QQ登录

只需一步,快速开始

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

protues仿真单片机+DS12C887实时时钟,时间不随秒增加?

  [复制链接]
跳转到指定楼层
楼主
ID:190344 发表于 2017-4-18 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcden=P3^4; //液晶使能端
  5. sbit rs=P3^5; //液晶数据命令选择端
  6. sbit led=P2^5; //控制LED的锁存器
  7. sbit dula=P2^6;  //控制LCD的段锁存器
  8. sbit wela=P2^7;  //控制LCD的位锁存器
  9. sbit dsirq=P3^2;  //DS12887的中断请求端
  10. sbit dsds=P1^7;  //DS12887的读允许输入端
  11. sbit dsrw=P1^6; //DS12887的写允许输入端
  12. sbit dsas=P1^5;  //DS12887的地址选通端
  13. sbit dscs=P1^4;  //DS12887的芯片片选端
  14. sbit a=P3^0;  //设置键盘用的
  15. sbit b=P3^1;  //设置键盘用的
  16. sbit c=P3^6;  //设置键盘用的
  17. sbit d=P3^7;  //设置键盘用的
  18. sbit e=P3^3;  //设置键盘用的
  19. uchar code table1[]=" 2000-00-00     ";
  20. uchar code table2[]=" 00:00:00       ";
  21. uchar flag1,flag2,temp,temp1;
  22. /*
  23.   falg1标志位是用来判断是否执行从DS12C887中读取数据并送去液晶显示;
  24.   flag2标志位是用来判断LCD上显示的年数是否是闰年;
  25.   temp与temp1都时当月的天数值,用来判断DS12C887中的天数值是否大
  26.   于当月应有的天数,如大于则将天数值置1,如有需要请重新设置天数值。
  27. */  
  28. char miao,fen,nian,yue,ri,xingqi;  
  29. int shi;  //小时的数值大于128,所以不能选择char型数据
  30. /*------------
  31.   延时子程序
  32. */
  33. void delayms(uchar a)
  34. {
  35. uchar x,y;
  36. for(x=a;x>0;x--)
  37.   for(y=110;y>0;y--);
  38. }
  39. /*----------------
  40.   往液晶中写指令
  41. ----------------*/
  42. void write_com(uchar com)
  43. {
  44. rs=0;      //选择写命令模式
  45. lcden=0;  //将lcden置为零
  46. P0=com;   //将要写的命令字送到数据总线上
  47. delayms(5);  //稍做延时以待数据稳定
  48. lcden=1;  //使能端给一个高脉冲
  49. delayms(5);  //稍做延时
  50. lcden=0;  //将使能端置0以完成高脉冲
  51. }
  52. /*----------------
  53.   往液晶中写数据
  54. ----------------*/
  55. void write_date(uchar date)
  56. {
  57. rs=1;   //选择写数据模式
  58. lcden=0;  //将lcden置为零
  59. P0=date;  //将要写的数据送到数据总线上
  60. delayms(5);  //稍做延时以待数据稳定
  61. lcden=1;  //使能端给一个高脉冲
  62. delayms(5);  //稍做延时
  63. lcden=0;  //将使能端置0以完成高脉冲
  64. }
  65. /*--------------------
  66.   向DS12C887内写数据
  67. --------------------*/
  68. void write_ds(uchar add,uchar date)
  69. {
  70. dscs=0;
  71. dsas=1;
  72. dsds=1;
  73. dsrw=1;
  74. P0=add;   //先写地址
  75. dsas=0;
  76. dsrw=0;
  77. P0=date;  //再写数据
  78. dsrw=1;
  79. dsas=1;
  80. dscs=1;
  81. }
  82. /*--------------------
  83.   从DS12C887中读数据
  84. --------------------*/
  85. uchar read_ds(uchar add)
  86. {
  87. uchar temp;
  88. dscs=0;
  89. dsas=1;
  90. dsds=1;
  91. dsrw=1;
  92. P0=add;   //先写地址
  93. dsas=0;
  94. dsds=0;
  95. P0=0xff;  //读数据之前先将P0口置一
  96. temp=P0;  //再读数据
  97. dsds=1;
  98. dsas=1;
  99. dscs=1;  
  100. return temp;
  101. }
  102. /*----------------------------------------------------------------------
  103.   24小时制在液晶的指定位置写入时分秒,12小时制在液晶的指定位置写入分秒
  104. ----------------------------------------------------------------------*/
  105. void write_sfm(uchar add,uchar date)
  106. {
  107. uchar shi,ge;
  108. shi=date/10;  //分解一个2位数的十位和个位
  109. ge=date%10;
  110. write_com(0x80+0x40+add);  //设置显示位置
  111. write_date(shi+0x30);    //送去液晶显示十位
  112. write_date(ge+0x30);    //送去液晶显示个位
  113. }
  114. /*----------------------------
  115.   在液晶的指定位置写入年月日
  116. ----------------------------*/
  117. void write_nyr(uchar add,uchar date)
  118. {
  119. uchar shi,ge;
  120. shi=date/10;  //分解一个2位数的十位和个位
  121. ge=date%10;
  122. write_com(0x80+add);   //设置显示位置
  123. write_date(shi+0x30);  //送去液晶显示十位
  124. write_date(ge+0x30);   //送去液晶显示个位
  125. }
  126. /*----------------------------
  127.   在液晶的指定位置写入星期
  128. ----------------------------*/
  129. void write_xq(uchar date)
  130. {
  131. uchar i;
  132. i=date;
  133. write_com(0x80+12);
  134. switch(i)    //switch-case语句判断i的值及执行相应的操作
  135. {
  136.   case 1:     //当i等于1时,送去液晶显示MON(星期一)
  137.    write_date('M');
  138.    write_date('O');
  139.    write_date('N');
  140.    break;
  141.   case 2:     //当i等于2时,送去液晶显示TUE(星期二)
  142.    write_date('T');
  143.    write_date('U');
  144.    write_date('E');
  145.    break;
  146.   case 3:     //当i等于3时,送去液晶显示WED(星期三)
  147.    write_date('W');
  148.    write_date('E');
  149.    write_date('D');
  150.    break;
  151.   case 4:     //当i等于4时,送去液晶显示THU(星期四)
  152.    write_date('T');
  153.    write_date('H');
  154.    write_date('U');
  155.   break;
  156.   case 5:       //当i等于5时,送去液晶显示FRI(星期五)
  157.    write_date('F');
  158.    write_date('R');
  159.    write_date('I');
  160.    break;
  161.   case 6:     //当i等于6时,送去液晶显示SAT(星期六)
  162.    write_date('S');
  163.    write_date('A');
  164.    write_date('T');
  165.    break;
  166.   case 7:     //当i等于7时,送去液晶显示SUN(星期日)
  167.    write_date('S');
  168.    write_date('U');
  169.    write_date('N');
  170.    break;
  171. }
  172. }
  173. /*----------------
  174.   判断天数的函数
  175. ----------------*/
  176. char day_num(char nian,char yue)
  177. {
  178. char num;
  179. if(((nian%4==0)&&(nian%100!=0))||((nian%100==0)&&(nian%400==0)))  //闰年判断
  180.   flag2=1;
  181. else
  182.   flag2=0;
  183. if(flag2==1)  //是闰年时,将第二月的天数设为29
  184. {
  185.   switch(yue)
  186.   {
  187.    case 1:
  188.     num=31;  //1月的天数
  189.     break;
  190.    case 2:
  191.     num=29;  //2月的天数
  192.     break;
  193.    case 3:
  194.     num=31;  //3月的天数
  195.     break;
  196.    case 4:
  197.     num=30;  //4月的天数
  198.     break;
  199.    case 5:
  200.     num=31;  //5月的天数
  201.     break;
  202.    case 6:
  203.     num=30;  //6月的天数
  204.     break;
  205.    case 7:
  206.     num=31;  //7月的天数
  207.     break;
  208.    case 8:
  209.     num=31;  //8月的天数
  210.     break;
  211.    case 9:
  212.     num=30;  //9月的天数
  213.     break;
  214.    case 10:
  215.     num=31;  //10月的天数
  216.     break;
  217.    case 11:  
  218.     num=30;  //11月的天数
  219.     break;
  220.    case 12:
  221.    num=31;  //12月的天数
  222.     break;
  223.   }
  224. }
  225. if(flag2==0)  //不是闰年时,将第二月的天数设为28
  226. {
  227.   switch(yue)
  228.   {
  229.    case 1:
  230.     num=31;  //1月的天数
  231.     break;
  232.    case 2:
  233.     num=28;  //2月的天数
  234.     break;
  235.    case 3:
  236.     num=31;  //3月的天数
  237.     break;
  238.    case 4:
  239.     num=30;  //4月的天数
  240.     break;
  241.    case 5:
  242.     num=31;  //5月的天数
  243.     break;
  244.    case 6:
  245.     num=30;  //6月的天数
  246.     break;
  247.    case 7:
  248.     num=31;  //7月的天数
  249.     break;
  250.    case 8:
  251.     num=31; //8月的天数
  252.     break;
  253.    case 9:
  254.     num=30;  //9月的天数
  255.     break;
  256.    case 10:
  257.     num=31;  //10月的天数
  258.     break;
  259.    case 11:
  260.     num=30;  //11月的天数
  261.     break;
  262.    case 12:
  263.     num=31;  //12月的天数
  264.     break;
  265.   }
  266. }
  267. return num;  //函数的返回值时当月的天数
  268. }
  269. /*--------------
  270.   键盘扫描程序
  271. --------------*/
  272. void keyscan()
  273. {
  274. uchar num;
  275. a=0;  //设置矩阵键盘S1低电平
  276. b=1;  //设置矩阵键盘S2高电平
  277. if(c==0)   //判断S3有没有被按下
  278. {
  279.   delayms(5);  //去抖延时
  280.   if(c==0)  //判断S3有没有被按下
  281.   {
  282.    while(!c);  //判断按键S3有没有释放
  283.    num++;     //按下键的次数
  284.    flag1=1;    //标志位flag1置一
  285.    if(num==1)  //当num等于1时,光标在秒钟处闪烁
  286.    {
  287.     write_com(0x80+0x40+8);
  288.     write_com(0x0f);
  289.    }
  290.    if(num==2)  //当num等于2时,光标在分钟处闪烁
  291.    {
  292.     write_com(0x80+0x40+5);
  293.     write_com(0x0f);
  294.    }
  295.    if(num==3) //当num等于3时,光标在时钟处闪烁
  296.    {
  297.     write_com(0x80+0x40+2);
  298.     write_com(0x0f);
  299.    }
  300.    if(num==4) //当num等于4时,光标在年处闪烁
  301.    {
  302.    write_com(0x80+4);
  303.     write_com(0x0f);
  304.    }
  305.    if(num==5)  //当num等于5时,光标在月处闪烁
  306.    {
  307.     write_com(0x80+7);
  308.     write_com(0x0f);
  309.    }
  310.    if(num==6)  //当num等于6时,光标在日处闪烁
  311.    {
  312.     write_com(0x80+10);
  313.     write_com(0x0f);
  314.    }
  315.    if(num==7)  //当num等于7时,光标在星期处闪烁
  316.    {
  317.     write_com(0x80+14);
  318.     write_com(0x0f);
  319.    }
  320.    if(num==8)
  321.    {
  322.     num=0;  //num清0
  323.     write_ds(0x00,miao);    //将秒写入DS12C887
  324.     write_ds(0x02,fen);     //将分写入DS12C887
  325.     write_ds(0x04,shi);     //将时写入DS12C887
  326.     write_ds(0x06,xingqi);  //将星期写入DS12C887
  327.     write_ds(0x07,ri);     //将日写入DS12C887
  328.     write_ds(0x08,yue);     //将月写入DS12C887
  329.     write_ds(0x09,nian);    //将年写入DS12C887
  330.     flag1=0;  //标志位flag1清0
  331.    }
  332.   }
  333. }
  334. if(num!=0)  //当功能键S3按下后,数值增大键S4才有用
  335. {
  336.   a=0;  //设置矩阵键盘第一排位低电平
  337.   b=1;  //设置矩阵键盘第二排位高电平
  338.   if(d==0)  //判断S4有没有被按下
  339.   {
  340.    delayms(5);  //去抖延时
  341.    if(d==0)  //判断S4有没有被按下
  342.    {
  343.     while(!d);  //判断按键S4有没有释放
  344.     if(num==1)
  345.     {
  346.      miao++;  //当num=1时,秒值加一
  347.      if(miao>59)  //当秒值大于59时,将秒值置0
  348.       miao=0;
  349.      write_sfm(7,miao);  //将秒值写入液晶显示
  350.      write_com(0x80+0x40+8);  //光标在秒值的个位闪烁
  351.      write_com(0x0f);
  352.     }
  353.     if(num==2)
  354.     {
  355.      fen++;  //当num=2时,分值加一??
  356.      if(fen>59)  //当分值大于59时,将分值置0
  357.       fen=0;
  358.      write_sfm(4,fen);  //将分值写入液晶显示
  359.      write_com(0x80+0x40+5);  //光标在分值的个位闪烁
  360.      write_com(0x0f);
  361.     }
  362.     if(num==3)
  363.     {
  364.     shi++;  //当num=3时,时钟加一?
  365.     if(shi>23)  //当时钟大于23时,将时钟置0
  366.       shi=0;
  367.      write_sfm(1,shi);  //将时钟写入液晶显示
  368.      write_com(0x80+0x40+2);  //光标在时钟的个位闪烁
  369.      write_com(0x0f);
  370.     }
  371.     if(num==4)
  372.     {
  373.      nian++;  //当num=4时,年加一
  374.      if(nian>99)  //当年大于99时,将年置0
  375.       nian=0;
  376.      write_nyr(3,nian);  //将年写入液晶显示
  377.      write_com(0x80+4);  //光标在年的个位闪烁
  378.      write_com(0x0f);
  379.     }
  380.     if(num==5)
  381.     {
  382.      yue++;  //当num=5时,月加一
  383.      if(yue>12)  //当月大于12时,将月置1
  384.       yue=1;
  385.      write_nyr(6,yue);   //将月写入液晶显示
  386.      write_com(0x80+7);  //光标在月的个位闪烁
  387.      write_com(0x0f);
  388.     }
  389.     if(num==6)
  390.     {
  391.      ri++;  //当num=6时,日加一
  392.      temp=day_num(nian,yue);
  393.      if(ri>temp)  //当日大于当月的天数时,将日置1
  394.       ri=1;
  395.     write_nyr(9,ri);  //将日写入液晶显示
  396.     write_com(0x80+10);  //光标在月的个位闪烁
  397.      write_com(0x0f);
  398.     }
  399.     if(num==7)
  400.     {
  401.      xingqi++;  //当num=7时,星期加一
  402.      if(xingqi>7)  //当星期大于7时,将星期置1
  403.       xingqi=1;
  404.      write_xq(xingqi);  //将星期写入液晶显示
  405.      write_com(0x80+14);  //光标在星期的个位闪烁
  406.      write_com(0x0f);
  407.     }
  408.    }
  409.   }
  410. }
  411. if(num!=0)  //当功能键S3按下后,数值减小键S5才有用
  412. {
  413.   a=1;  //设置矩阵键盘第一排位高电平
  414.   b=0;  //设置矩阵键盘第二排位低电平
  415.   if(e==0)  //判断S5有没有被按下
  416.   {
  417.    delayms(5);  //去抖延时
  418.    if(e==0)  //判断S5有没有被按下
  419.    {
  420.     while(!e);  //判断按键S5有没有释放
  421.     if(num==1)
  422.     {
  423.      miao--;  //当num=1时,秒值减一
  424.      if(miao<0)  //当秒值小于0时,将秒值置59
  425.       miao=59;
  426.      write_sfm(7,miao);  //将秒值写入液晶显示
  427.      write_com(0x80+0x40+8);  //光标在秒值的个位闪烁
  428.      write_com(0x0f);
  429.     }
  430.     if(num==2)
  431.     {
  432.      fen--;  //当num=2时,分值减一
  433.      if(fen<0)  //当分值小于0时,将分值置59
  434.       fen=59;
  435.      write_sfm(4,fen);  //将分值写入液晶显示
  436.      write_com(0x80+0x40+5);  //光标在分值的个位闪烁
  437.      write_com(0x0f);
  438.     }
  439.     if(num==3)
  440.     {
  441.      shi--;  //当num=3时,时钟减一
  442.      if(shi<0) //当时钟小于0时,将时钟置23
  443.       shi=23;
  444.      write_sfm(1,shi);  //将时钟写入液晶显示
  445.      write_com(0x80+0x40+2);  //光标在时钟的个位闪烁
  446.      write_com(0x0f);
  447.         }
  448.     if(num==4)
  449.     {
  450.      nian--;  //当num=4时,年减一
  451.      if(nian<0)  //当年小于0时,将年置99
  452.       nian=99;
  453.      write_nyr(3,nian);  //将年写入液晶显示
  454.      write_com(0x80+4);  //光标在年的个位闪烁
  455.      write_com(0x0f);
  456.     }
  457.     if(num==5)
  458.     {
  459.      yue--;  //当num=5时,月减一
  460.      if(yue<1)  //当月小于1时,将月置12
  461.       yue=12;
  462.      write_nyr(6,yue);   //将月写入液晶显示
  463.      write_com(0x80+7);  //光标在月的个位闪烁
  464.      write_com(0x0f);
  465.     }
  466.     if(num==6)
  467.     {
  468.      ri--;  //当num=6时,日减一
  469.      temp=day_num(nian,yue);
  470.     if(ri>temp)
  471.      ri=temp;
  472.      if(ri<1)  //当日小于1时,将日置为当月的天数
  473.       ri=temp;
  474.      write_nyr(9,ri);  //将日写入液晶显示
  475.      write_com(0x80+10);  //光标在月的个位闪烁
  476.      write_com(0x0f);
  477.     }
  478.     if(num==7)
  479.     {
  480.      xingqi--;  //当num=7时,星期加一
  481.      if(xingqi<1)  //当星期小于1时,将星期置7
  482.       xingqi=7;
  483.      write_xq(xingqi);  //将星期写入液晶显示
  484.      write_com(0x80+14);  //光标在星期的个位闪烁
  485.      write_com(0x0f);
  486.     }
  487.    }
  488.   }
  489. }
  490. }
  491. /*--------------
  492. ? 初始化时钟函数
  493. --------------*/
  494. void set_time()
  495. {
  496. write_ds(0,0);  //初始化时钟秒钟的数值为0
  497. write_ds(2,0); //初始化时钟分钟的数值为0
  498. write_ds(4,1); //初始化时钟小时的数值为1
  499. write_ds(6,1); //初始化时钟星期的数值为1
  500. write_ds(7,1); //初始化时钟日的数值为1
  501. write_ds(8,1); //初始化时钟月的数值为1
  502. write_ds(9,0); //初始化时钟年的数值为0
  503. }
  504. /*------------
  505. ? 初始化程序
  506. ------------*/
  507. void init()
  508. {
  509. uchar i;
  510. dula=0;         //关段锁存器(不让数码管显示)
  511. wela=0;    //关位锁存器
  512. lcden=0;
  513. write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口(LCD初始化设置)
  514. write_com(0x0c);  //设置开显示,不显示光标(LCD初始化设置)
  515. write_com(0x06);  //写一个字符后地址指针自动加一(LCD初始化设置)
  516. write_com(0x01);  //显示清零,数据指针清零(LCD初始化设置)
  517. write_com(0x80);  //将数据指针定位到第一行第一字处
  518. for(i=0;i<16;i++)
  519. {
  520.   write_date(table1[i]);  //将字符串1写入液晶
  521. }  
  522. write_com(0x80+0x40);  //将数据指针定位到第2行第1字处
  523. for(i=0;i<16;i++)
  524. {
  525.    write_date(table2[i]);  //将字符串2写入液晶
  526. }
  527. set_time();  //初始化时钟
  528. }
  529. void main()
  530. {
  531. init();  //调用初始化子程序
  532. while(1)
  533. {
  534.   keyscan();
  535.   if(flag1==0)  //当标志位flag1等于0时,才从DS12C887中读取数据并送去液晶显示
  536.   {
  537.    miao=read_ds(0);  //从DS12C887中读取秒的值
  538.    write_sfm(7,miao);  //将秒值送去液晶显示
  539.    fen=read_ds(0x02);  //从DS12C887中读取分的值
  540.    write_sfm(4,fen);  //将分值送去液晶显示
  541.    shi=read_ds(0x04);  //从DS12C887中读取小时的值
  542.    write_sfm(1,shi);  //将小时送去液晶显示
  543.    nian=read_ds(0x09);  //从DS12C887中读取年的值
  544.    write_nyr(3,nian);  //将年值送去液晶显示
  545.    yue=read_ds(0x08);  //从DS12C887中读取月份的值
  546.    write_nyr(6,yue);  //将月份送去液晶显示
  547.    ri=read_ds(0x07);  //从DS12C887中读取日的值
  548.    temp1=day_num(nian,yue);  //读取当月的天数值
  549.    if(ri>temp1)  //判断DS12C887中的天数值是否大于当月应有的天数,如大于则将天数值置1,如有需要请重新设置
  550.     ri=1;
  551.    write_nyr(9,ri);  //将日值送去液晶显示
  552.    xingqi=read_ds(0x06);  //从DS12C887中读取星期的值
  553.    write_xq(xingqi);  //将星期送去液晶显示
  554.   }
  555. }
  556. }
复制代码


protues仿真文件.zip

17.25 KB, 下载次数: 50

评分

参与人数 5黑币 +30 收起 理由
JACKLI + 8 淡定
yy6133312 + 5 很给力!
heyanrog + 10 赞一个!
2017_fpga + 2 绝世好帖!
4651516 + 5 绝世好帖!

查看全部评分

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

使用道具 举报

来自 2#
ID:195496 发表于 2022-11-9 19:56 | 只看该作者
今天无聊,把这个文件下载看了一下,也没有什么问题啊,就是时间秒不走,唉,PDF文档,也没有找到原因,DS1302有下个控制位,可以控制启停,这个芯片上没有啊。找个一样的仿真文件对比,没有什么明确原因,程序比对也是一模一样的,折腾到最后,发现是仿真图上的总线没有加上标号,只标了AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7,在时钟芯片一端没有标上总线标识,放置网络标签AD[0..7],奇迹出现了,秒开始走了,哈哈哈哈,今天这一天真是掉进一个大坑了

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:190344 发表于 2017-4-18 18:25 | 只看该作者
这是仿真图,仿真时时间不随秒增加

1.png (22.84 KB, 下载次数: 115)

1.png
回复

使用道具 举报

地板
ID:190959 发表于 2017-4-18 19:51 | 只看该作者
可能是程序出错
回复

使用道具 举报

5#
ID:190344 发表于 2017-4-18 21:00 | 只看该作者
4651516 发表于 2017-4-18 19:51
可能是程序出错

那具体是哪里出错了呢
回复

使用道具 举报

6#
ID:111634 发表于 2017-4-18 23:26 | 只看该作者
本帖最后由 zl2168 于 2017-4-18 23:46 编辑

这么长的程序,不会有人看的。不懂的人,看了等于白看;懂的人,有看的时间,自己已经编好了一个。
实例91 具有校正功能的时钟1302LCD1602显示)
Proteus仿真,确认有效。
实例91 带校正时钟1302(LCD1602显示).rar (52.68 KB, 下载次数: 36)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1,书中电路和程序设计有详细说明,程序语句条条有注解。






回复

使用道具 举报

7#
ID:190344 发表于 2017-4-19 10:31 | 只看该作者
zl2168 发表于 2017-4-18 23:26
这么长的程序,不会有人看的。不懂的人,看了等于白看;懂的人,有看的时间,自己已经编好了一个。
实例91 ...

我下载过这个,没有C语言主程序,想在里面加点其他程序就没法加了
回复

使用道具 举报

8#
ID:189227 发表于 2017-4-21 10:33 | 只看该作者
适当修改参数,可能是晶振的问题
回复

使用道具 举报

9#
ID:111634 发表于 2017-4-21 17:20 | 只看该作者
ly1509608456 发表于 2017-4-19 10:31
我下载过这个,没有C语言主程序,想在里面加点其他程序就没法加了

仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

10#
ID:206309 发表于 2017-5-31 11:55 | 只看该作者
看下晶振
回复

使用道具 举报

11#
ID:140489 发表于 2017-9-20 12:09 | 只看该作者
DS12C887数据总线上要添加网络标号AD[0..7],仿真才行,不加网络标号就等于没和单片机连接,仿真肯定不行的
回复

使用道具 举报

12#
ID:139284 发表于 2018-3-23 18:29 | 只看该作者
求一个HEX文件
回复

使用道具 举报

13#
ID:111634 发表于 2018-3-23 21:47 | 只看该作者

上例的HEX文件免费下载
回复

使用道具 举报

14#
ID:82765 发表于 2018-3-23 23:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

15#
ID:296177 发表于 2018-3-23 23:41 | 只看该作者
厉害了
回复

使用道具 举报

16#
ID:434205 发表于 2018-11-27 14:58 | 只看该作者
小姐姐,谢谢你的程序和仿真文件,就是为何压缩包里不附上源程序的hex文件呢?
回复

使用道具 举报

17#
ID:434205 发表于 2018-11-27 15:05 | 只看该作者
ly1509608456 发表于 2017-4-19 10:31
我下载过这个,没有C语言主程序,想在里面加点其他程序就没法加了

小姐姐,你学习单片机有多久了啊,我有很多问题想向你请教啊!
回复

使用道具 举报

18#
ID:434205 发表于 2018-11-27 15:09 | 只看该作者
zl2168 发表于 2017-4-18 23:26
这么长的程序,不会有人看的。不懂的人,看了等于白看;懂的人,有看的时间,自己已经编好了一个。
实例91 ...

这本书好像我有唉,是书上实例91对吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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