找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的多功能电子时钟的仿真

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. void xianshi(int bianma,int adr);
  4. int key(void);
  5. uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xc7,0x39,0x5e,0x79,0x71};
  6. uchar table2[]={0x88,0x90,0xa0,0xc0};
  7. sbit key1=P3^6;
  8. sbit key2=P3^7;
  9. int flag2=0,t=0,i=0,j=0,m=0,k=0,b=0,c=0,a=0;
  10. int anjian1();
  11. int anjian2();
  12. void delay(uchar z)
  13. {
  14.         uchar x,y;
  15.         for(x=z;x>0;x--)
  16.                 for(y=110;y>0;y--);
  17. }

  18. void main()
  19. {       
  20.         int kk=16;
  21.         int set_flag=0;
  22.         TMOD=0x11;
  23.         TH1=(65536-50000)/256;
  24.         TL1=(65536-50000)%256;
  25.         TH0=(65536-10000)/256;
  26.         TL0=(65536-10000)%256;
  27.         ET0=1;
  28.         ET1=1;
  29.         EA=1;
  30.         EX0=1;
  31.         IT0=1;
  32.         TR1=1;        

  33.        
  34.         while(1)
  35.         {
  36.             if(anjian1())
  37.                 {
  38.                         flag2=1;       
  39.                 }
  40.                 if(flag2)
  41.                 {
  42.                    if(anjian2())
  43.                          { a++;
  44.                            while(anjian2()==1);
  45.                          }
  46.                            while(a>0)
  47.                                  {
  48.                           xianshi(b%10,3);
  49.                                 xianshi(b/10,2);
  50.                                 xianshi(c%10,1);
  51.                                 xianshi(c/10,0);
  52.                                
  53.                                  if(anjian2())
  54.                          { a++;
  55.                          while(anjian2()==1);
  56.                          
  57.                          }
  58.                                 if(a==2)
  59.                                 {
  60.                                  TR0=1;
  61.                                 }
  62.                                 if(a==3)
  63.                                 {
  64.                                  TR0=0;
  65.                                
  66.                                 }
  67.                                 if(a==4)
  68.                                 {
  69.                                  a=0;
  70.                                  b=0,c=0;
  71.                                 }
  72.                          }
  73.                          
  74.                          xianshi(m,3);
  75.                          xianshi(k,2);
  76.                          xianshi(j,1);
  77.                          xianshi(i,0);
  78.                        
  79.                          
  80.                          
  81.                  }
  82.                 else
  83.                 {
  84.                         P2=0Xff;
  85.                         P0=0;
  86.                         t=0;
  87.                         m=0,k=0,j=0,i=0;
  88.                        
  89.                 }
  90.                 kk=key();

  91.                 if(kk!=16)
  92.                 {
  93.                         if(kk==15)
  94.                         {
  95.                                  TR1=0;set_flag=0;
  96.                         }
  97.                         if(kk==14)
  98.                         {
  99.                                  TR1=1;set_flag=0;//退出模式
  100.                         }
  101.                         if(kk==13)
  102.                         {
  103.                                  set_flag=3;//设置分的个位
  104.                         }
  105.                         if(kk==12)
  106.                         {
  107.                                  set_flag=4;//设置分的十位
  108.                         }
  109.                         if(kk==11)
  110.                         {
  111.                                  set_flag=5;//设置时的个位
  112.                         }
  113.                         if(kk==10)
  114.                         {
  115.                                  set_flag=6;//设置时的十位
  116.                         }
  117.                         if((kk<10)&&(set_flag!=0))
  118.                         {
  119.                                 switch(set_flag)
  120.                                 {
  121.                                        
  122.                                         case 3:
  123.                                         m=kk;
  124.                                         break;
  125.                                         case 4:
  126.                                         if(kk<6)
  127.                                                 k=kk;
  128.                                         break;
  129.                                         case 5:
  130.                                         j=kk;
  131.                                         break;
  132.                                         case 6:
  133.                                         if(kk<6)
  134.                                          i=kk;
  135.                                         break;               
  136.                                 }
  137.                         }

  138.                 }
  139.                 kk=16;
  140.                  
  141.         }
  142. }
  143. void xianshi(int bianma,int adr)
  144. {
  145.         P2=0xff;
  146.         P0=0;
  147.         P2=~table1[bianma];
  148.         delay(1);
  149.         P0=table2[adr];
  150.         delay(1);
  151.         delay(30);
  152.        

  153. }
  154. void dingshiqi1() interrupt 3
  155. {       
  156.         TH1=(65536-50000)/256;
  157.         TL1=(65536-50000)%256;
  158.         t++;
  159.         if(t==20)
  160.         {
  161.           t=0;
  162.                 m++;
  163.                 if(m==10)
  164.                 {
  165.                  k++;
  166.                  m=0;
  167.                  
  168.                 }
  169.                 if(k==6)
  170.                 {
  171.                 j++;
  172.                 k=0;
  173.                 }
  174.                 if(j==10)
  175.                 {
  176.                  i++;
  177.                  j=0;
  178.                
  179.                 }
  180.                 if(i==6)
  181.                 {
  182.                   
  183.                         i=0;
  184.                
  185.                 }
  186.                
  187.                
  188.                
  189.                
  190.                
  191.        
  192.         }
  193.        
  194.        

  195.        
  196. }
  197. void dingshiqi0() interrupt 1
  198. {
  199.   TH0=(65536-10000)/256;
  200.         TL0=(65536-10000)%256;
  201.         b++;
  202.         if(b==100)
  203.         {b=0;
  204.          c++;
  205.         }
  206.         if(c==60)
  207.         {
  208.           c=0;
  209.                
  210.        
  211.         }
  212.        


  213. }
  214. int anjian1()
  215. {
  216.        
  217.         int key;
  218.         key=key1;
  219.         if(key==0)
  220.         {
  221.                 delay(20);
  222.                 key=key1;
  223.                 if(key==0)
  224.                 {
  225.                         delay(200);
  226.                         return 1;
  227.                 }               
  228.                 }
  229.                         return 0;
  230. }
  231. int anjian2()
  232. {
  233.        
  234.         int keyy;
  235.         keyy=key2;
  236.         if(keyy==0)
  237.         {
  238.                 delay(20);
  239.                 keyy=key2;
  240.                 if(keyy==0)
  241.                 {
  242.                         delay(200);
  243.                         return 1;
  244.                 }               
  245.                 }
  246.                         return 0;
  247. }
  248. void INT0_() interrupt 0
  249. {
  250.         flag2=0;
  251. }
  252. int key(void)
  253. {
  254.         int k=16;
  255.         int temp=0;
  256.         P1=0xfe;
  257.         temp=P1;
  258.         if(temp!=0xfe)
  259.         {
  260.                 delay(25);
  261.                 if(temp!=0xfe)
  262.                 {
  263.                         if(temp==0xee)
  264.                         {
  265.                                 k=0;
  266.                         }
  267.                         if(temp==0xde)
  268.                         {
  269.                                 k=1;
  270.                         }
  271.                         if(temp==0xbe)
  272.                         {
  273.                                 k=2;
  274.                         }
  275.                         if(temp==0x7e)
  276.                         {
  277.                                 k=3;
  278.                         }
  279.                 }
  280.                 delay(1000);
  281.         }
  282.         P1=0xfd;
  283.         temp=P1;
  284.         if(temp!=0xfd)
  285.         {
  286.                 delay(25);
  287.                 if(temp!=0xfd)
  288.                 {
  289.                         if(temp==0xed)
  290.                         {
  291.                                 k=4;
  292.                         }
  293.                         if(temp==0xdd)
  294.                         {
  295.                                 k=5;
  296.                         }
  297.                         if(temp==0xbd)
  298.                         {
  299.                                 k=6;
  300.                         }
  301.                         if(temp==0x7d)
  302.                         {
  303.                                 k=7;
  304.                         }
  305.                 }
  306.                 delay(1000);
  307.         }
  308.         P1=0xfb;
  309.         temp=P1;
  310.         if(temp!=0xfb)
  311.         {
  312.                 delay(25);
  313.                 if(temp!=0xfb)
  314.                 {
  315.                         if(temp==0xeb)
  316.                         {
  317.                                 k=8;
  318.                         }
  319.                         if(temp==0xdb)
  320.                         {
  321.                                 k=9;
  322.                         }
  323. ……………………

  324. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
基于单片机的多功能电子时钟.rar (65.65 KB, 下载次数: 25)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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