找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5483|回复: 2
收起左侧

DS1302与数码管设计的单片机电子表课程设计

[复制链接]
ID:215274 发表于 2017-6-27 22:55 | 显示全部楼层 |阅读模式
你们可以看看,我也做的不太哈

课程设计任务书

课程名称:单片机原理与应用
设计题目C51系列单片机时()
               
业:电子信息工程班级:
学生姓名::
起迄日期:
指导教师: 刘国亮

Protues仿真电路
0.002.jpg
电子钟功能
0.003.jpg
日期显示
0.004.jpg
闹钟显示及闹钟开关显示位  右侧1为闹铃开  0为关
0.005.jpg
四个独立按键实现功能切换及各功能设置  设置时设置位闪烁
0.006.jpg

0.png 0.png

4.课程设计工作进度计划:
序号
起 迄 日 期
工  作  内  容

1

16日至17日

方案的论证和选择

2

18日至19日

构思设计整体框架

3

20日

电路设计

4

21日至25日

根据设计的电路写程序

5

26日至29日

调试程序并且用设计好的电路仿真

29日

验收

主指导教师签名

日期:

         年     月    日




单片机源程序如下:
  1. #include
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define play P0
  5. sbit LSA=P1^0;
  6. sbit LSB=P1^1;
  7. sbit LSC=P1^2;
  8. sbit led=P2^2; //闹钟检测
  9. sbit k1=P2^7;//        功能切换
  10. sbit k2=P2^6;//设置加
  11. sbit k3=P2^5;//         设置减  
  12. sbit k4=P2^4; //设置位选
  13. sbit beet=P1^5; //蜂鸣器输出口
  14. uchar y;//按键松开
  15. uchar kai;//闹钟开启标志
  16. uchar she;//设置标志
  17. uchar t;//时间计数
  18. uchar num;//功能切换
  19. uchar fen;
  20. uchar shi;
  21. uchar miao;
  22. uchar yue;
  23. uchar nian;
  24. uchar ri;
  25. uchar shijian[8];
  26. uchar  shi1; //闹铃时
  27. uchar fen1;         //闹铃分
  28. unsigned char code shuma[12]={
  29. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                  //数码管显示数组0到9
  30. 0x7f,0x6f,0x40,0x00};
  31. uchar brunyue[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  32. uchar runyue[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  33. void zhongshe();
  34. void qishe();
  35. void naoshe();
  36. void shezhi();
  37. void delay10ms(void)   //误差 0us
  38. {
  39.     unsigned char a,b,c;
  40.     for(c=1;c>0;c--)
  41.         for(b=38;b>0;b--)
  42.             for(a=130;a>0;a--);
  43. }
  44. void naozhong()
  45. {   uint a,m;  
  46.         if((shi1==shi)&&(fen1==fen)&&(kai%2))
  47.           {                 for(m=20;m>0;m--)
  48.                for(a=10;a>0;a--)
  49.                    if((k1==0)||(k2==0)||(k3==0)||(k4==0))
  50.                   { kai=0;break;  }
  51.                     else
  52.                      beet=~beet;         
  53.            }
  54. }
  55. void plays()                          //输出显示
  56. {
  57.         unsigned char i;
  58.         unsigned int j;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 switch(i)         //位选,选择点亮的数码管,
  62.                 {
  63.                         case(0):
  64.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  65.                         case(1):
  66.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  67.                         case(2):
  68.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  69.                         case(3):
  70.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  71.                         case(4):
  72.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  73.                         case(5):
  74.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  75.                         case(6):
  76.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  77.                         case(7):
  78.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位        
  79.                 }
  80.                  play=shuma[shijian[i]];
  81.                  if(t>50)
  82.         {                 switch(she)
  83.                 {  
  84.                   case(3):
  85.                  if((i==0)||(i==1))
  86.                   play=0x00; break;
  87.                   case(2):
  88.                    if((i==3)||(i==4))
  89.                   play=0x00; break;
  90.                   case(1):
  91.                    if((i==6)||(i==7))
  92.                   play=0x00; break;
  93.                 }
  94.      }
  95.                  j=10;                                                 //扫描间隔时间设定
  96.                 while(j--);        
  97.                 play=0x00;//消隐
  98.         }
  99. }
  100. void nao()                                //闹钟赋值
  101. {  shijian[7]=kai;
  102.    shijian[6]=11;
  103.    shijian[5]=11;
  104.    shijian[4]=fen1%10;
  105.    shijian[3]=fen1/10;
  106.    shijian[2]=10;
  107.    shijian[1]=shi1%10;
  108.    shijian[0]=shi1/10;

  109. }
  110. void rili()                                 //日期赋值
  111. {  shijian[7]=ri%10;
  112.    shijian[6]=ri/10;
  113.    shijian[5]=10;
  114.    shijian[4]=yue%10;
  115.    shijian[3]=yue/10;
  116.    shijian[2]=10;
  117.    shijian[1]=nian%10;
  118.    shijian[0]=nian/10;
  119. }
  120. void zhong()                                //电子钟赋值
  121. { shijian[7]=miao%10;
  122.           shijian[6]=miao/10;
  123.           shijian[5]=10;
  124.           shijian[4]=fen%10;
  125.           shijian[3]=fen/10;
  126.           shijian[2]=10;
  127.           shijian[1]=shi%10;
  128.           shijian[0]=shi/10;
  129. }
  130. void InitTimer0(void)
  131. {
  132.      TMOD = 0x01;
  133.     TH0 = 0x0D8;
  134.     TL0 = 0x0F0;
  135.     EA = 1;
  136.     ET0 = 1;
  137.     TR0 = 1;
  138. }
  139. void shezhi()                                //功能设置函数
  140. {  if((she!=0)&&((k2==0)||(k3==0)))  
  141.    {  delay10ms();
  142.    if((she!=0)&&((k2==0)||(k3==0)))
  143.          {
  144.            switch(num)
  145.                  { case(0):   
  146.                                     zhongshe(); break;
  147.                    case(1):
  148.                           qishe(); break;
  149.                    case(2):
  150.                                      naoshe();break;
  151.                  }
  152.          }
  153.    }
  154. }
  155. void main()
  156. {         
  157.     num=0;kai=1;she=0;        
  158.         fen1=59;shi1=23;
  159.         miao=0;fen=58;        shi=23;
  160.     ri=19;        yue=12;        nian=13;
  161.     InitTimer0();
  162.         while(1)
  163.         {  
  164.         if(k1==0)
  165.            {delay10ms();
  166.                     if(k1==0)
  167.                          {num=(num+4)%3;
  168.                           she=0;}
  169.                          led=~led;
  170.                          while(!k1) ;}
  171.          if(k4==0)
  172.            {delay10ms();
  173.                     if(k4==0)
  174.                   she=(she+5)%4;
  175.                   while(!k4) ;
  176.            }
  177.      shezhi();
  178.          naozhong();
  179.                  plays();         
  180.          
  181.         }
  182. }
  183. void Timer0Interrupt(void) interrupt 1
  184. {
  185.     TH0 = 0x0D8;
  186.     TL0 = 0x0F0;
  187.           t++;
  188.           if(t==100)
  189.                 { t=0;
  190.                   miao++;        
  191.                   if(miao>59)
  192.                   { miao=0;
  193.                           fen++;
  194.                           if(fen>59)
  195.                           {
  196.                             fen=0;
  197.                             shi++;        
  198.                               if(shi>23)
  199.                                    {
  200.                                     shi=0;
  201.                                         ri++;
  202.                                                 if(nian%4==0)
  203.                                                 { if(ri>runyue[yue-1])
  204.                                                         {   ri=1;
  205.                                    yue++;  }
  206.                                                         if(yue>12)
  207.                                                           {  yue=1;
  208.                                                                 nian++;        }        
  209.                                                  }
  210.                                                  else
  211.                                                  {if(ri>brunyue[yue-1])
  212.                                                       {
  213.                                                                ri=0;
  214.                                                                      yue++;  
  215.                                                          }
  216.                                                                   if(yue>12)
  217.                                                                   {
  218.                                                                    yue=0;
  219.                                                                    nian++ ;
  220.                                                                    }

  221.                                                    }
  222.                           }
  223.                      }
  224.                 }
  225.         }
  226.         switch(num)
  227.         {  
  228.            case(0):
  229.            zhong();break;
  230.            case(1):
  231.            rili();break;
  232.            case(2):
  233.            nao();break;
  234.            default: zhong();
  235.         }
  236. }
  237. void zhongshe()
  238. {         switch(she)
  239.   {        
  240. case(1):
  241.      miao=0;InitTimer0();break;        
  242. case(2):
  243.     if(k2==0)
  244.                         fen=(fen+61)%60;
  245.         else   
  246.                 fen=(fen+59)%60;
  247.         break;
  248. case(3):
  249.         if(k2==0)
  250.                            shi=(shi+25)%24;
  251.         else
  252.                           shi=(shi+23)%24;
  253.                            break;
  254.   }        
  255.   while((!k2)||(!k3)) ;                        
  256. }
  257. void naoshe()
  258. {                 switch(she)
  259.   {        
  260. case(1):
  261.      if(kai==1)
  262.          kai=0;
  263.          else kai=1; break;        
  264. case(2):
  265.     if(k2==0)
  266.                         fen1=(fen1+61)%60;
  267.         else   
  268.                 fen1=(fen1+59)%60;
  269.         break;
  270. case(3):
  271.         if(k2==0)
  272.                            shi1=(shi1+25)%24;
  273.         else
  274.                           shi1=(shi1+23)%24;
  275.                            break;
  276. ……………………

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

所有资料51hei提供下载:
电子钟.zip (174.61 KB, 下载次数: 113)

评分

参与人数 2黑币 +55 收起 理由
妮妮妮 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:264178 发表于 2017-12-28 17:30 | 显示全部楼层
TH0 = 0x0D8;     TL0 = 0x0F0;这个什么意思呀?大神
回复

使用道具 举报

ID:444687 发表于 2018-12-12 11:19 | 显示全部楼层
很好,但就是程序有点乱
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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