找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机控制三个CD4522计数器构成的分频器程序和仿真都有 求帮忙解释程序

[复制链接]
跳转到指定楼层
楼主
这是一个由51单片机控制的三个CD4522计数器构成的分频器,其连接了一个LM016L和两个按键,通过两个按键控制分频,求程序解释,仿真和程序在附件: 仿真.zip (90.31 KB, 下载次数: 29)

下面是proteus仿真原理图文件
(附件中有工程文件下载):




单片机源程序:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit P34=P3^4;
  5. sbit lcdrs=P3^7;
  6. sbit lcden=P3^6;
  7. sbit P32=P3^2;
  8. sbit P33=P3^3;
  9. sbit P10=P1^0;
  10. uchar dispbuf[3]={0,0,1};
  11. uchar code table[]="0123456789";
  12. int i=0,temp;
  13. char temp_g,temp_s,temp_b;

  14. void delay(uchar z)
  15. {
  16. uchar x,y;
  17. for(x=z;x>0;x--)
  18.   for(y=110;y>0;y--);
  19. }


  20. void write_data(uchar date)
  21. {
  22. lcdrs=1;
  23. P0=date;
  24. delay(2);
  25. lcden=1;
  26. delay(2);
  27. lcden=0;
  28. }


  29. void write_com(uchar com)
  30. {
  31.     lcdrs=0;
  32.     P0=com;
  33.     delay(2);
  34.     lcden=1;
  35.     delay(2);
  36.     lcden=0;
  37. }


  38. void main()
  39. {
  40.          //TMOD=0x10;
  41.          //TH1=(65536-500)/256;
  42.          //TL1=(65536-500)%256;
  43.          //ET1=1;
  44.          PT1=1;
  45.          EX0=1;
  46.          EX1=1;
  47.          EA=1;
  48.          //TR1=1;
  49.          lcden=0;
  50.          //P1=0x00;
  51.          //P2=0x00;
  52.          //P10=1;
  53.          write_com(0x38);
  54.          write_com(0x0c);
  55.          write_com(0x04);
  56.          write_com(0x01);
  57.          write_com(0x80);
  58.          write_data('F');
  59.          write_data('r');
  60.          write_data('e');
  61.          write_data('q');
  62.          write_data('u');
  63.          write_data('e');
  64.          write_data('n');
  65.          write_data('c');
  66.          write_data('y');
  67.          write_data(':');
  68.          write_data('*');
  69.          write_com(0xc0+13);
  70.          write_data('K');
  71.          write_data('H');
  72.          write_data('z');
  73.          while(1)
  74.          {
  75.           if(temp==0)
  76.             {
  77.               temp=1;
  78.              if(i==0)
  79.              {
  80.                write_com(0x80+10);
  81.                write_data('*');
  82.           }
  83.               else
  84.               {
  85.                  write_com(0x80+10);
  86.                  write_data(' ');
  87.               }
  88.               if(i==1)
  89.              {
  90.                write_com(0x80+11);
  91.                write_data('*');
  92.           }
  93.               else
  94.               {
  95.                  write_com(0x80+11);
  96.                  write_data(' ');
  97.               }
  98.               if(i==2)
  99.                {
  100.                    write_com(0x80+12);
  101.                    write_data('*');
  102.                }
  103.                 else
  104.                 {
  105.                    write_com(0x80+12);
  106.                    write_data(' ');
  107.                 }
  108.                  write_com(0xc0+10);
  109.                  write_data(table[dispbuf[0]]);
  110.                  write_data(table[dispbuf[1]]);
  111.                  write_data(table[dispbuf[2]]);
  112.                  temp_g=dispbuf[2]&0x0f;
  113.                  temp_s=dispbuf[1]&0x0f;
  114.                  temp_s=temp_s<<4;
  115.                  temp_b=dispbuf[0]&0x0f;
  116.            P2=temp_b|temp_s;
  117.            P1=temp_g;
  118.           }
  119.          }
  120. }
  121. //void int50ms() interrupt 3
  122. //{
  123. // TR1=0;
  124. // TH1=(65536-500)/256;
  125. // TL1=(65536-500)%256;
  126. // P34=~P34;
  127. // TR1=1;
  128. //}
  129. void INEX0() interrupt 0
  130. {
  131. delay(2);
  132. if(P32==0);
  133. {
  134.   temp=0;
  135.   ++i;
  136.   if(i>3)
  137.   i=0;
  138. }
  139. while(P32==0);
  140. }
  141. void INEX1() interrupt 2
  142. {
  143. delay(2);
  144. if(P33==0);
  145. {
  146.   temp=0;
  147.   dispbuf[i]++;
  148.   if(dispbuf[i]>9)
  149.   dispbuf[i]=0;
  150. }
  151. while(P33==0);
  152. }
复制代码


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

使用道具 举报

沙发
ID:203687 发表于 2017-5-26 13:39 | 只看该作者
求主要步骤解释,有大神吗
回复

使用道具 举报

板凳
ID:906989 发表于 2021-4-18 01:12 来自触屏版 | 只看该作者
求电路图讲解
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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