久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3963|回復: 1
收起左側

DS1302數(shù)碼管時鐘仿真和源代碼

[復制鏈接]
ID:140489 發(fā)表于 2016-10-26 16:58 | 顯示全部樓層 |閱讀模式
這個只是讀取出時間,其它功能沒有寫出來,用了四位共陰數(shù)碼管顯示。
小數(shù)點閃爍  第3位數(shù)碼管倒置顯示小數(shù)點與第二位數(shù)碼管一起顯示“:”,1秒閃爍一次

仿真用了4個一位的數(shù)碼管和一個四位的數(shù)碼管,如果用一個四位的數(shù)碼管,可以修改程序把第三位的

小數(shù)點去掉
0.png

附件里面有源代碼與仿真文件: 時鐘.rar (114.65 KB, 下載次數(shù): 89)



  1. //這個只是讀取出時間,其它功能沒有寫出來,用了四位共陰數(shù)碼管顯示。
  2. // 小數(shù)點閃爍  第3位數(shù)碼管倒置顯示小數(shù)點
  3. //  與第二位數(shù)碼管一起顯示“:”,1秒閃爍一次

  4. //仿真用了4個一位的數(shù)碼管和一個四位的數(shù)碼管
  5. /**********************************
  6. *                DS1302簡單時間顯示                  *
  7. *                        數(shù)碼管顯示                          *
  8. ***********************************/
  9. #include <reg52.h>
  10. #include<intrins.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. #define W P2                                                                          //位選
  14. #define D P0                                                                        //段選
  15. sbit dio=P1^1;                                                                          //數(shù)據(jù)口
  16. sbit sclk=P1^0;                                                                         //控制數(shù)據(jù)時鐘
  17. sbit RST=P1^2;                                                                          //使能端、復位端
  18. /************按鍵引腳定義***********/
  19. sbit s1=P3^0;                                                                        //按鍵 加
  20. sbit s2=P3^1;                                                                        //按鍵 減
  21. sbit s3=P3^2;                                                                        //按鍵 選擇
  22. char knum=0,snum,fnum;

  23. /***********寫時分秒地址************/
  24. #define write_shi  0x84
  25. #define write_fen  0x82
  26. #define write_miao 0x80
  27. /***********讀時分秒地址************/
  28. #define read_shi  0x85
  29. #define read_fen  0x83
  30. #define read_miao 0x81

  31. char shi,fen,miao;                                                                 //讀出數(shù)據(jù)存儲變量
  32. //uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};                //不帶小數(shù)點
  33. //uchar dd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};                //帶小數(shù)點


  34.                            // 0     1         2          3           4    5    6    7   8     9    10   11        
  35. uchar code d[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};                //共陰不帶小數(shù)點  

  36. uchar code dd[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//        共陰帶小數(shù)點

  37. void delay(uint z)                                                          //延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);大約延時200ms.
  38. {                                                                                                //delay(500);大約延時500ms.
  39.         uint x,y;
  40.         for(x=z;x>0;x--)
  41.                 for(y=110;y>0;y--);        
  42. }

  43. void write_1302(uchar add,dat)                 //寫函數(shù)  qx
  44. {
  45.         uchar i,temp;
  46.         temp=add;
  47.         RST=0;
  48.         _nop_();
  49.         sclk=0;
  50.         _nop_();
  51.         RST=1;
  52.         _nop_();
  53.         for(i=0;i<8;i++)
  54.         {
  55.                 sclk=0;
  56.                 _nop_();
  57.                 if((temp&0x01)==0x01)
  58.                         dio=1;
  59.                         else
  60.                         dio=0;
  61.                 temp>>=1;
  62.                 sclk=1;
  63.                 _nop_();
  64.         }
  65.         temp=dat;
  66.         for(i=0;i<8;i++)
  67.         {
  68.                 sclk=0;
  69.                 _nop_();
  70.                 if((temp&0x01)==0x01)
  71.                         dio=1;
  72.                         else
  73.                         dio=0;
  74.                 temp>>=1;
  75.                 sclk=1;
  76.                 _nop_();
  77.         }
  78.         RST=0;
  79.         sclk=0;
  80. }
  81. uchar read_1302(uchar add)                                   //讀函數(shù)                qx
  82. {
  83.         uchar dat,dat1,i,temp;
  84.         temp=add;
  85.         RST=0;
  86.         _nop_();
  87.         sclk=0;
  88.         _nop_();
  89.         RST=1;
  90.         for(i=0;i<8;i++)
  91.         {
  92.                 sclk=0;
  93.                 _nop_();
  94.                 if((temp&0x01)==0x01)
  95.                         dio=1;
  96.                         else
  97.                         dio=0;
  98.                 temp>>=1;
  99.                 sclk=1;
  100.                 _nop_();
  101.         }
  102.         for(i=0;i<8;i++)
  103.         {
  104.                 sclk=0;
  105.                 _nop_();
  106.                 if(dio)
  107.                     dat|=0x80;
  108.                 if(i<7)
  109.                         dat>>=1;
  110.                 sclk=1;
  111.         }
  112.         dat1=dat/16;
  113.         dat=dat%16;
  114.         dat=dat1*10+dat;  
  115.         RST=0;
  116.         sclk=0;
  117.         return dat;
  118. }                                 




  119. void init_1302()                                                        //初始化函數(shù) 設置時間
  120. {
  121.         write_1302(0x8e,0x00);                                        //保護取消,可以進行讀寫操作
  122.         write_1302(write_miao,0x56);        
  123.         write_1302(write_fen,0x49);
  124.         write_1302(write_shi,0x14);
  125.         write_1302(0x8e,0x80);                                        //保護啟動,不能進行讀寫操作
  126. }

  127. void display(uchar shi,uchar fen,uchar miao)                          //顯示函數(shù)
  128. {
  129.         if(knum==0)
  130.         {
  131.                 snum=30;
  132.                 fnum=30;
  133.         }
  134.         if(knum==1)
  135.         {
  136.                 fnum++;
  137.                 snum=30;
  138.         }
  139.         if(knum==2)
  140.         {
  141.                 snum++;
  142.                 fnum=30;
  143.         }
  144.         
  145.         if(snum>=30)
  146.         {
  147.                 P2=0x01;                                                                        //位選
  148.                 P0=d[shi/10];                                                        //段選
  149.                 delay(5);
  150.                 P0=0X00;
  151.                                                                                 //位選
  152.                                                                         //消隱
  153.                 if(miao%2==0)                                                        //小數(shù)點閃爍
  154.                 {
  155.                         P2=0x02;
  156.                         P0=dd[shi%10];
  157.                         delay(5);
  158.                         P0=0X00;
  159.                                                                                 //消隱
  160.                 }
  161.                 else
  162.                 {
  163.                     P2=0x02;
  164.                         P0=d[shi%10];
  165.                         delay(5);
  166.                         P0=0X00;
  167.                                                                                                 //消?
  168.                 }
  169.             if(snum==60)
  170.                         snum=0;
  171.         }               
  172.         if(fnum>=30)
  173.         {
  174.                
  175.                 if(miao%2==0)                                                        //小數(shù)點閃爍  第3位數(shù)碼管倒置顯示小數(shù)點
  176.                                                                                                  //與第二位數(shù)碼管一起顯示“:”,1秒閃爍一次
  177.                 {
  178.                 P2=0x04;
  179.                 P0=dd[fen/10];
  180.                 delay(5);
  181.                 P0=0X00;
  182.                 }                                                                //消隱


  183.            else
  184.            {
  185.                    P2=0x04;
  186.                 P0=d[fen/10];
  187.                 delay(5);
  188.                 P0=0X00;
  189.            
  190.            }
  191.                 P2=0x08;
  192.                 P0=d[fen%10];
  193.                 delay(5);
  194.                 P0=0X00;
  195.                                                                                         //消隱
  196.                 if(fnum==60)
  197.                         fnum=0;
  198.         }
  199. }
  200. void read_sf()
  201. {
  202.         shi=read_1302(read_shi);
  203.         fen=read_1302(read_fen);
  204.         miao=read_1302(read_miao);
  205.         display(shi,fen,miao);
  206. }
  207. void keyscan()                                                                   //按鍵掃描函數(shù)
  208. {                                                                                   
  209.         if(s3==0)                                                                   //選擇按鍵按下
  210.         {
  211.                 delay(10);
  212.                 if(s3==0)
  213.                 {
  214.                         while(!s3)
  215.                                 display(shi,fen,miao);        //加上這句,按鍵按下就不會閃
  216.                         knum++;
  217.                         if(knum==1)                                                  //分閃爍
  218.                         {
  219.                                  write_1302(0x8e,0x00);                //保護取消
  220.                                  write_1302(write_miao,0x80);
  221.                         }
  222.                         if(knum==3)                                                   //時鐘啟動
  223.                         {
  224.                                 knum=0;
  225.                                 write_1302(write_miao,0x00);
  226.                                 write_1302(0x8e,0x80);                //保護啟動
  227.                         }
  228.                 }
  229.         }
  230.         if(knum==1)                                                                //分鐘調(diào)節(jié)
  231.         {
  232.                 if(s1==0)                                                        //加
  233.                 {
  234.                         delay(10);
  235.                         if(s1==0)
  236.                         {        
  237.                                 while(!s1)
  238.                                         display(shi,fen,miao);        //加上這句,按鍵按下就不會閃
  239.                                 fen++;
  240.                                 fen=fen/10*16+fen%10;                //轉為16進制
  241.                                 if(fen==0x60)
  242.                                         fen=0x00;
  243.                                 write_1302(write_fen,fen);        //寫入1302
  244.                                 read_sf();                                        //讀出時間,然后顯示
  245.                         }
  246.                 }
  247.                 if(s2==0)
  248.                 {
  249.                         delay(10);
  250.                         if(s2==0)
  251.                         {        
  252.                                 while(!s2)
  253.                                         display(shi,fen,miao);        //加上這句,按鍵按下就不會閃
  254.                                 fen--;
  255.                                 fen=fen/10*16+fen%10;                //轉為16進制
  256.                                 if(fen==-1)
  257.                                         fen=0x59;
  258.                                 write_1302(write_fen,fen);
  259.                                 read_sf();
  260.                         }
  261.                 }
  262.         }
  263.         if(knum==2)
  264.         {
  265.                 if(s1==0)
  266.                 {
  267.                         delay(10);
  268.                         if(s1==0)
  269.                         {        
  270.                                 while(!s1)
  271.                                         display(shi,fen,miao);        //加上這句,按鍵按下就不會閃
  272.                                 shi++;
  273.                                 shi=shi/10*16+shi%10;                //轉為16進制
  274.                                 if(shi==0x24)
  275.                                         shi=0x00;
  276.                                 write_1302(write_shi,shi);
  277.                                 read_sf();
  278.                         }
  279.                 }
  280.                 if(s2==0)
  281.                 {
  282.                         delay(10);
  283.                         if(s2==0)
  284.                         {        
  285.                                 while(!s2)
  286.                                           display(shi,fen,miao);        //加上這句,按鍵按下就不會閃
  287.                                 shi--;
  288.                                 shi=shi/10*16+shi%10;                //轉為16進制
  289.                                 if(shi==-1)
  290.                                         shi=0x23;
  291.                                 write_1302(write_shi,shi);
  292.                                 read_sf();
  293.                         }
  294.                 }
  295.         }
  296. }
  297. void main()
  298. {
  299.         init_1302();
  300.         while(1)
  301.         {
  302.                 read_sf();
  303.                 keyscan();

  304.                 display(shi,fen,miao);
  305.         }
  306. }
復制代碼


評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:140489 發(fā)表于 2016-10-26 16:59
怎么把那個售價5黑幣去掉

ID:60515 發(fā)表于 2016-12-28 16:53 來自觸屏版 | 顯示全部樓層
為什么在實物圖上不能正常顯示??
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: a级片在线观看 | av高清毛片 | 日韩欧美国产精品一区 | 日韩欧美视频免费在线观看 | 精品国产乱码一区二区三区 | 久久精品色欧美aⅴ一区二区 | 亚洲午夜精品视频 | 成人二区 | 国产一区二区三区免费观看视频 | 日韩三级视频 | 另类专区亚洲 | 久久精品综合网 | 久久人人网| 91天堂网| 最新国产精品精品视频 | 日韩中文字幕一区二区 | 最新中文字幕在线播放 | 国产激情一区二区三区 | 热久久久久 | 久久大陆| 蜜桃av鲁一鲁一鲁一鲁 | av网址在线 | 精品一区二区三区在线视频 | 欧美一级片在线看 | 欧美成人精品 | 成人福利在线视频 | 欧美视频二区 | 黄色小视频大全 | 欧美国产精品一区二区三区 | 精品日韩一区二区三区 | 黄色网络在线观看 | 日韩中文字幕高清 | 91久久久久久久久久久久久 | 欧美八区 | 亚洲在线一区二区三区 | 成人av色 | 久久久久久久久久久丰满 | 久久亚洲一区二区三区四区 | 欧美一级电影免费观看 | 怡红院免费的全部视频 | 国产农村妇女毛片精品久久麻豆 |