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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3591|回復: 6
打印 上一主題 下一主題
收起左側(cè)

STC15單片機計數(shù)器制作 附源程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:95809 發(fā)表于 2021-12-23 12:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在做一個調(diào)速電路的時候,需要使用計數(shù)器來統(tǒng)計機械往返運動的次數(shù),所以設計這個。使用15W408單片機,直接驅(qū)動數(shù)碼管顯示,電路非常簡單。傳感器使用的是磁力開關,需要重新計數(shù)的時候只要按一下復位鍵即可。使用了一個多月,效果很好。

制作出來的實物圖如下:


電路原理圖如下:


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

  2. #define uchar unsigned char
  3. #define uint unsigned int


  4. sbit FMQ=P3^4;//蜂鳴器

  5. sbit K1=P3^2; //按鍵加
  6. sbit K2=P3^5; //按鍵減
  7. sbit K3=P3^2; //復位

  8. bit flag_KEY=0; //按鍵松開標志位

  9. sbit DS1=P1^3;//數(shù)碼管第1位
  10. sbit DS2=P1^1;//數(shù)碼管第2位
  11. sbit DS3=P1^0;//數(shù)碼管第3位
  12. sbit DS4=P1^2;//數(shù)碼管第4位

  13. unsigned char ScanTime=1;

  14. unsigned int Num=0;


  15. //共陰數(shù)碼管段碼表,段接P2.0-2.7,位接P1.0-1.3
  16. unsigned char code SEG_Tab[]={      
  17.         0x3F,/*0*/
  18.         0x06,/*1*/
  19.         0x5B,/*2*/
  20.         0x4F,/*3*/
  21.         0x66,/*4*/
  22.         0x6D,/*5*/
  23.         0x7D,/*6*/
  24.         0x07,/*7*/
  25.         0x7F,/*8*/
  26.         0x6F,/*9*/
  27. };

  28. /*---------------------數(shù)碼管顯示---------------------------------------*/        
  29. void display()
  30. {        //數(shù)碼管初始化
  31.         P2=0x00;//P2=00000000
  32.         P1=0xFF;//P1=11111111

  33.   switch(ScanTime)
  34.         {
  35.           //----------數(shù)碼管第1位--------------               
  36.                 case 1:
  37.                         if(Num==0)
  38.                         {
  39.                                 P2=0x40;
  40.                         }
  41.                         else
  42.                         {
  43.                                 P2=SEG_Tab[Num/1000];
  44.                         }
  45.                                 
  46.                                 DS1=0;

  47.                 break;

  48.           //-----------數(shù)碼管第2位-------------               
  49.                 case 2:
  50.                         if(Num==0)
  51.                         {
  52.                                 P2=0x40;
  53.                         }
  54.                         else
  55.                         {
  56.                                 P2=SEG_Tab[Num/100%10];
  57.                         }                        
  58.                                 
  59.                         DS2=0;
  60.                                 
  61.                 break;

  62.                 //-----------數(shù)碼管第3位-------------               
  63.                 case 3:  
  64.                         if(Num==0)
  65.                         {
  66.                                 P2=0x40;
  67.                         }
  68.                         else
  69.                         {
  70.                                 P2=SEG_Tab[Num/10%10];
  71.                         }                        
  72.                         
  73.                
  74.                           DS3=0;                        
  75.                 break;

  76.                 //-----------數(shù)碼管第4位-------------               
  77.                 case 4:  
  78.                         if(Num==0)
  79.                         {
  80.                                 P2=0x40;
  81.                         }
  82.                         else
  83.                         {
  84.                                 P2=SEG_Tab[Num%10];
  85.                         }                        
  86.                         
  87.                         DS4=0;               
  88.                 break;

  89.          //------------------default---------------        
  90.                 default: break;        
  91.         }
  92.         
  93.         //-----數(shù)碼管循環(huán)------        
  94.         ScanTime++;
  95.         if(ScanTime>4)
  96.         {
  97.                 ScanTime=1;//循環(huán)掃描        
  98.         }
  99. }

  100. /*-------------------------------------
  101.                             按鍵掃描
  102. ---------------------------------------*/        
  103. void keyscan()
  104. {
  105.         if(K1==0)
  106.         {
  107.                 if(flag_KEY==1)//按鍵只響應1次
  108.                 {
  109.                         flag_KEY=0;
  110.                         
  111.                         if(Num<999)
  112.                         {
  113.                                 Num++;
  114.                         }
  115.                 }
  116.         }


  117.         else if(K2==0)
  118.         {
  119.                 if(flag_KEY==1)//按鍵只響應1次
  120.                 {
  121.                         flag_KEY=0;
  122.                         
  123.                         if(Num>0)
  124.                         {
  125.                                 Num--;
  126.                         }
  127.                 }
  128.         }


  129.                 else if(K3==0)
  130.         {
  131.                 if(flag_KEY==1)//按鍵只響應1次
  132.                 {
  133.                         flag_KEY=0;
  134.                         
  135.                         if(Num>0)
  136.                         {
  137.                                 Num=0;
  138.                         }
  139.                 }
  140.         }

  141.   else//按鍵松開
  142.   {        
  143.           flag_KEY=1;
  144.   }
  145. }







  146. void delay_ms(unsigned int ms)// 延時子程序
  147. {   
  148.   unsigned int a,b;
  149.   for(a=ms;a>0;a--)
  150.   for(b=123;b>0;b--);
  151. }
  152. /*-------------------------------------
  153.                             主函數(shù)
  154. ---------------------------------------*/        
  155. void main()
  156. {
  157.         P1M1 = 0x00; P1M0 = 0xFF; //P1口推挽模式
  158.         P2M1 = 0x00; P2M0 = 0xFF; //P2口推挽模式
  159.    
  160.         while(1)
  161.         {
  162.                 display();
  163.                 keyscan();
  164.                 delay_ms(10);
  165.                 if(Num>=100)
  166.                 {
  167.                         FMQ=0;
  168.                 }
  169.                 else
  170.                 {
  171.                         FMQ=1;
  172.                 }
  173.         }
  174. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:352736 發(fā)表于 2022-5-20 16:43 來自手機 | 只看該作者
版主你好,請問下載時單片機的晶振頻率設置多少?
回復

使用道具 舉報

板凳
ID:352736 發(fā)表于 2022-5-22 19:00 來自手機 | 只看該作者
版主,照電路搭建數(shù)碼管沒有顯示
回復

使用道具 舉報

地板
ID:235691 發(fā)表于 2024-1-29 16:12 | 只看該作者
數(shù)碼管不要限流電阻嗎
回復

使用道具 舉報

5#
ID:352736 發(fā)表于 2024-8-21 15:32 來自手機 | 只看該作者
沒有任何顯示
回復

使用道具 舉報

6#
ID:352736 發(fā)表于 2024-9-13 17:36 | 只看該作者
ID95809樓主你好,我仿制你的計數(shù)器程序計數(shù)沒反應,把K3復位按鈕那段程序刪了才可以計數(shù)不知道是什么原因
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人久久综合一区,久久久国产99 | 粉嫩av | 久久精品91久久久久久再现 | 亚洲精品在线观看视频 | 亚洲一区欧美 | 黑人中文字幕一区二区三区 | 黄网免费 | 久久精品国产清自在天天线 | 久久精品国产久精国产 | 伊人网伊人网 | 色久电影| 黑人精品欧美一区二区蜜桃 | 成人一区二区三区视频 | 日本粉嫩一区二区三区视频 | 亚洲欧美激情视频 | 精品欧美一区免费观看α√ | 国产精品美女久久久久aⅴ国产馆 | 精品亚洲一区二区三区 | 日韩欧美专区 | 亚洲欧美中文日韩在线v日本 | 99精品视频一区二区三区 | www国产成人免费观看视频,深夜成人网 | www.日日操 | 围产精品久久久久久久 | 亚洲国产免费 | 欧美精品久久久久 | 日干夜干| 羞羞视频免费在线观看 | 日本综合在线观看 | 日本精品视频在线 | 精品乱码一区二区三四区视频 | 男人的天堂在线视频 | 国产美女在线精品免费 | 国产99小视频 | 在线视频一区二区 | 九色在线观看 | 天天草天天干 | 国产精品欧美日韩 | 黄色国产 | 亚洲精品视频三区 | 午夜视频免费网站 |