找回密码
 立即注册

QQ登录

只需一步,快速开始

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

c51单片机+DIY电路每5分钟显示一次时钟 源程序

[复制链接]
跳转到指定楼层
楼主
以下时部分程序,谢谢。
制作出来的实物图如下:


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include "reg52.h"                                //单片机头文件
  2. #define uchar unsigned char        //定义uchar 代替 unsigned char
  3. #define uint unsigned int
  4. sbit shi=P0;
  5. sbit fen=P2;        //位定义
  6. sbit fenn=P1;
  7. sbit k1=P3^4;
  8. sbit k2=P3^5;
  9. sbit k3=P3^6;
  10. sbit k4=P3^7;
  11. void display(uchar a0,uchar a1,uchar a2,uchar a3,uchar a4,uchar a5);                  //函数声明
  12. //void delay(uchar mss);
  13. //修改了数组的值
  14. uchar code tab1[]={0x20,0x30,0x38,0x3c,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
  15. uchar code tab2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f};
  16. //uchar code tab3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
  17. //uchar code tab4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x38,0x3c,0x3e,0x3f};
  18. uchar code tab3[]={0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00};//数组显示
  19. uchar code tab4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20};

  20. //uchar code tab1[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
  21. //uchar code tab2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x38,0x3c,0x3e,0x3f};
  22.     //uchar code tab3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};          去除的
  23.     //uchar code tab4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x38,0x3c,0x3e,0x3f};          去除的
  24. //uchar code tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00};//数组显示
  25. //uchar code tab4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01};
  26. uchar ms=0,mg=0,fs=0,fg=0,ss=0,sg=0,m=0,f=0,s=0,ff=0,hf=0,fff=0;//定义变量



  27. char led[4]={0};  //显示数组,修改   

  28. void delay(int i)    //延时函数
  29. {
  30.         while(i--);
  31. }                                          

  32. void led4(void)    //显示函数
  33. {
  34.         char i;
  35.         for(i=0;i<4;i++)      //4位
  36.         {
  37.                 P0=~led[i];       //送段码 P2,P0对换了
  38.                 P2=~(0x01<<i);    //送位码
  39.                 delay(100);       //延时
  40.                 P0=0xff;          //关闭显示
  41.                 P2=0xff;          //关闭显示
  42.         }
  43. }

  44. char k,kk; //循环次数
  45. long n;  //移位
  46. int h;        //另外一个定时变量
  47. main()
  48. {
  49.         TMOD=0x01;
  50.         TH0=(65536-45872)/256;
  51.         TL0=(65536-45872)%256;
  52.         EA=1;
  53.         ET0=1;
  54.         TR0=1;
  55.         while(1)

  56.         {
  57.                 led4();                                                                                                                                             //调用显示函数
  58.                    if(k1==0)                                                                 //按键k1为低电频
  59.           {         
  60.              delay(40);                                                                //延时去抖
  61.              if(k1==0)                                                                 //判断k1是否按下
  62.                   {                                                                    
  63.                    while(k1!=1);                                                                                                           //等待按键释放
  64.                    ff++;                                                                                                                           //ff,5分钟自加
  65.                                    fff++;                                                              //fff也自加                                                                            //秒置0
  66.                    if(ff==12)                                                         //ff够12,自动置0,小时自加1
  67.                    {
  68.                       ff=0;
  69.                                           m=0;
  70.                                           h++;
  71.                                           hf++;
  72.                                           if(h==11)
  73.                                           {h=0;}
  74.                    }
  75.                         }
  76.                         }

  77.               if(k2==0)                         //按键k2控制加1小时
  78.            {
  79.              delay(40);
  80.              if(k2==0)
  81.                   {
  82.                    while(k2!=1);
  83.                     h++;
  84.                                         hf++;
  85.                                         m=0;
  86.                    if(h==11)
  87.                    {
  88.                     h=0;
  89.                    }
  90.                   }

  91.           }
  92.                 if(fff==1)                //把fff清0返回5分钟后的效果
  93.                 {
  94.                         fff=0;         
  95.                         led[0]=tab1[k];     
  96.                         led[3]=tab2[k];
  97.                         k++;
  98.                         if(k>11) k=0;           
  99.                         }

复制代码


/////////////////////////////


全部资料51hei下载地址:
5分钟时钟项目.rar (58.44 KB, 下载次数: 9)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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