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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用89C52單片機制作簡易電子表源碼和原理圖

[復制鏈接]
跳轉到指定樓層
樓主
采用中斷的方法‘,使用了兩個74HC595和兩個數碼管,
完全可以用1個6位數碼管加一個74HC595完成的,不過開始沒想好,畫好了原理圖也就不想改了。
附上代碼和原理圖
歡迎探討。


單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. unsigned int a=4000;
  4. unsigned char temp0,temp1,temp2,temp3,temp4,temp5;
  5. unsigned int time_buf[]={0,0,0};
  6. unsigned char code t_display[]={
  7. //         0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F   消隱
  8.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};        //段碼

  9. sbit ST_CP1=P1^0;
  10. sbit SH_CP1=P1^2;
  11. sbit DS1=P1^1;

  12. sbit ST_CP2=P1^3;
  13. sbit SH_CP2=P1^5;
  14. sbit DS2=P1^4;
  15.        
  16. sbit w1=P1^7;
  17. sbit w2=P1^6;
  18.        
  19.         void delay(unsigned char i)
  20. {
  21.         unsigned char m,n,k;
  22.         for(m=i;m>0;m--)
  23.         for(k=128;k>0;k--)
  24.         for(n=130;n>0;n--);
  25. }

  26. void input1_595(unsigned char dat)        //發送一個字節
  27. {               
  28.         unsigned char        i;
  29.         for(i=0; i<8; i++)
  30.         {
  31.                 if(dat & 0x80)        DS1 = 1;
  32.                 else                        DS1 = 0;
  33.                 SH_CP1 = 1;
  34.                 SH_CP1 = 0;
  35.                 dat = dat << 1;
  36.         }
  37. }

  38. void output1_595()
  39. {
  40.         ST_CP1=0;
  41.         _nop_();
  42.         ST_CP1=1;
  43.         _nop_();
  44.         ST_CP1=0;
  45. }

  46. void input2_595(unsigned char dat)        //發送一個字節
  47. {               
  48.         unsigned char        i;
  49.         for(i=0; i<8; i++)
  50.         {
  51.                 if(dat & 0x80)        DS2 = 1;
  52.                 else                        DS2 = 0;
  53.                 SH_CP2 = 1;
  54.                 SH_CP2 = 0;
  55.                 dat = dat << 1;
  56.         }
  57. }

  58. void output2_595()
  59. {
  60.         ST_CP2=0;
  61.         _nop_();
  62.         ST_CP2=1;
  63.         _nop_();
  64.         ST_CP2=0;
  65. }



  66. void main()
  67. {
  68.         unsigned char a,b,c;
  69.         //unsigned char i;
  70.         while(1)
  71.         {
  72.         TH0=0X06;
  73.         TL0=0X06;
  74.         TMOD=0X02;
  75.         IE=0X82;
  76.         TR0=1;  //TR0啟動加一計數
  77.                 temp0=time_buf[2]%10;
  78.                 temp1=time_buf[2]/10;
  79.                 temp2=time_buf[1]%10;
  80.                 temp3=time_buf[1]/10;
  81.                 temp4=time_buf[0]%10;
  82.                 temp5=time_buf[0]/10;
  83.         //for(a=128;a>0;a--)
  84.                 w2=0;w1=0;
  85.         for(b=130;b>0;b--)
  86.                 for(c=20;c>0;c--)
  87.                 {
  88.                         w2=1;w1=1;
  89.                         input1_595(t_display[temp0]);
  90.                         output1_595();
  91.                         input2_595(t_display[temp2]);
  92.                         output2_595();
  93.                         w2=0;w1=1;
  94.                         for(a=5;a>0;a--);
  95.         //                _nop_();        _nop_();        _nop_();
  96.                                 w2=1;w1=1;
  97.                         input1_595(t_display[temp1]);
  98.                         output1_595();
  99.                         input2_595(t_display[temp3]);
  100.                         output2_595();
  101.                         w2=1;w1=0;
  102.                         for(a=5;a>0;a--);
  103.         //                        _nop_();        _nop();        _nop_();
  104.                 }/*
  105.                 input1_595(t_display[temp2]);
  106.                 output1_595();
  107.                 input2_595(t_display[temp3]);
  108.                 output2_595();
  109.                 delay(20);
  110.                 input1_595(t_display[temp4]);
  111.                 output1_595();
  112.                 input2_595(t_display[temp5]);
  113.                 delay(20);*/
  114.         }
  115. }

  116. timer()  interrupt 1  using 1
  117. {
  118.         a--;
  119.         if(a==0)
  120.         {
  121.                 a=4000;
  122.                 time_buf[2]+=1;
  123.                 if(time_buf[2]>=60)
  124.                 {
  125.                         time_buf[2]=0;
  126.                         time_buf[1]+=1;
  127.                         if(time_buf[1]>=60)
  128.                         {
  129.                                 time_buf[1]=0;
  130.                                 time_buf[0]+=1;
  131.                         }
  132.                 }
  133.         }
  134. }
復制代碼

所有資料51hei提供下載:
中斷.zip (27.18 KB, 下載次數: 20)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-5-27 05:31 | 只看該作者
仿真工程文件能分享一下嗎?
回復

使用道具 舉報

板凳
ID:316468 發表于 2018-5-27 09:34 | 只看該作者
鐘表不能這樣做的,晶振速度越快累計誤差越大,你這個一個月下來估計都能慢好幾分鐘。
回復

使用道具 舉報

地板
ID:316468 發表于 2018-5-27 09:38 | 只看該作者
做鐘表類的要用32768的低速晶振,最好用ds1302之類的時鐘芯片去做。再加后背電源,斷電不用重新設置鐘表時間。
回復

使用道具 舉報

5#
ID:336991 發表于 2018-6-2 18:47 | 只看該作者
lucheng77 發表于 2018-5-27 09:38
做鐘表類的要用32768的低速晶振,最好用ds1302之類的時鐘芯片去做。再加后背電源,斷電不用重新設置鐘表時 ...

好的好的,多謝老哥指點,確實有點不求甚解了
我主要是想寫下595驅動的程序,之前學的時候沒搞懂,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级在线视频 | 精品国产综合 | 在线视频a | 夜夜爽99久久国产综合精品女不卡 | av在线播放免费 | 国产精品视频播放 | 免费在线观看成年人视频 | 一区二区三区福利视频 | 国产成人一区 | 久久久www | 成人永久免费视频 | 自拍视频精品 | 亚洲精品二三区 | 日韩精品一区二区三区视频播放 | 一区日韩| www.国产精| 亚洲成人一区二区在线 | 欧美日韩国产一区 | 欧美在线a | 久久免费精品视频 | 91人人澡人人爽 | 一区二区在线看 | 狠狠综合久久av一区二区老牛 | 伊人看片 | 欧美性另类 | 国产精品激情小视频 | 亚洲欧美国产一区二区三区 | 久久国产精品久久久久久久久久 | 国产资源在线视频 | 久久三级av | 在线视频日韩 | 国产欧美精品 | 欧美视频免费 | 欧美性精品| 一级毛片大全免费播放 | 青青激情网 | 欧美激情国产精品 | 欧美精 | 久草视频观看 | 亚洲精精品| 91精品国产综合久久婷婷香蕉 |