亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4466|回復: 1
打印 上一主題 下一主題
收起左側

DS1302數碼管時鐘仿真和源代碼

[復制鏈接]
跳轉到指定樓層
樓主
這個只是讀取出時間,其它功能沒有寫出來,用了四位共陰數碼管顯示。
小數點閃爍  第3位數碼管倒置顯示小數點與第二位數碼管一起顯示“:”,1秒閃爍一次

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

小數點去掉


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



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

  4. //仿真用了4個一位的數碼管和一個四位的數碼管
  5. /**********************************
  6. *                DS1302簡單時間顯示                  *
  7. *                        數碼管顯示                          *
  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;                                                                          //數據口
  16. sbit sclk=P1^0;                                                                         //控制數據時鐘
  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;                                                                 //讀出數據存儲變量
  32. //uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};                //不帶小數點
  33. //uchar dd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};                //帶小數點


  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};                //共陰不帶小數點  

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

  37. void delay(uint z)                                                          //延時函數,z的取值為這個函數的延時ms數,如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)                 //寫函數  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)                                   //讀函數                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()                                                        //初始化函數 設置時間
  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)                          //顯示函數
  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)                                                        //小數點閃爍
  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)                                                        //小數點閃爍  第3位數碼管倒置顯示小數點
  176.                                                                                                  //與第二位數碼管一起顯示“:”,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()                                                                   //按鍵掃描函數
  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)                                                                //分鐘調節
  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. }
復制代碼


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

板凳
ID:60515 發表于 2016-12-28 16:53 來自觸屏版 | 只看該作者
為什么在實物圖上不能正常顯示??
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表