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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15單片機計數器制作 附源程序

[復制鏈接]
跳轉到指定樓層
樓主
在做一個調速電路的時候,需要使用計數器來統計機械往返運動的次數,所以設計這個。使用15W408單片機,直接驅動數碼管顯示,電路非常簡單。傳感器使用的是磁力開關,需要重新計數的時候只要按一下復位鍵即可。使用了一個多月,效果很好。

制作出來的實物圖如下:


電路原理圖如下:


單片機源程序如下:
  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;//數碼管第1位
  10. sbit DS2=P1^1;//數碼管第2位
  11. sbit DS3=P1^0;//數碼管第3位
  12. sbit DS4=P1^2;//數碼管第4位

  13. unsigned char ScanTime=1;

  14. unsigned int Num=0;


  15. //共陰數碼管段碼表,段接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. /*---------------------數碼管顯示---------------------------------------*/        
  29. void display()
  30. {        //數碼管初始化
  31.         P2=0x00;//P2=00000000
  32.         P1=0xFF;//P1=11111111

  33.   switch(ScanTime)
  34.         {
  35.           //----------數碼管第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.           //-----------數碼管第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.                 //-----------數碼管第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.                 //-----------數碼管第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.         //-----數碼管循環------        
  94.         ScanTime++;
  95.         if(ScanTime>4)
  96.         {
  97.                 ScanTime=1;//循環掃描        
  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.                             主函數
  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. }
復制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

板凳
ID:352736 發表于 2022-5-22 19:00 來自觸屏版 | 只看該作者
版主,照電路搭建數碼管沒有顯示
回復

使用道具 舉報

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

使用道具 舉報

5#
ID:352736 發表于 2024-8-21 15:32 來自觸屏版 | 只看該作者
沒有任何顯示
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re这里只有精品6 | 亚洲精品乱码久久久久久动漫 | 官场少妇尤物雪白高耸 | 午夜视频免费看 | 操碰在线视频 | 国产xxx| 国产日产精品一区二区三区的介绍 | 午夜爽爽影院 | 国产精品免费一区 | 天天碰天天操 | 国产一级自拍 | 日韩美女在线观看 | 特黄一级视频 | 久久久久国产视频 | 国产亚洲视频在线观看 | 玖玖久久| aaaaaa毛片 | 欧美大片18 | 久久视频在线免费观看 | 日韩成人中文字幕 | 午夜看片 | 日韩中文字幕一区 | 日本一级大片 | 亚洲欧美精品在线 | 在线视频亚洲 | 成人黄性视频 | 色哟哟av| 日本毛片在线观看 | 精品久久久一区二区 | 日韩一区二区三区在线 | 精品免费国产一区二区三区四区 | 国产欧美精品 | 精品一区二区三区视频 | 久久99九九 | 日韩精品久久久 | 亚洲久久在线 | 欧美18免费视频 | 中文字幕第一 | www.色中色| 免费不卡视频 | 亚洲精品成人网 |