找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6852|回复: 4
收起左侧

STM32按键控制数码管 计数 翻转的程序源码

[复制链接]
ID:412827 发表于 2018-11-7 17:39 | 显示全部楼层 |阅读模式
stm32单片机源程序如下:
  1. /*******************************************************************************
  2. --------------------------------------------------------------------------------
  3. * 实 验 名                 : 使用库函数点亮一个LED
  4. * 实验说明       :
  5. * 连接方式       :
  6. * 注    意                 : LED驱动文件在led.c内
  7. *******************************************************************************/

  8. #include "stm32f10x.h"
  9. #include "led.h"

  10. /*******************************************************************************
  11. * 函 数 名         : main
  12. * 函数功能                   : 主函数
  13. * 输    入         : 无
  14. * 输    出         : 无
  15. *******************************************************************************/
  16. unsigned char shumaguan_Tab[] = {
  17.                                                                                                 0xc0, // 显示 0
  18.                                                                                                 0xf9, // 显示 1
  19.                                                                                                 0xa4, // 显示 2
  20.                                                                                                 0xb0, // 显示 3
  21.                                                                                                 0x99, // 显示 4
  22.                                                                                                 0x92, // 显示 5
  23.                                                                                                 0x82, // 显示 6
  24.                                                                                                 0xf8, // 显示 7
  25.                         0x80, // 显示 8
  26.                                                                                                 0x98, // 显示 9
  27.                                };                     //  数码管显示字符表
  28. //unsigned char shumaguan1_Tab[] = {
  29. //                                                                                                0x98, // 显示 9
  30. //                                                                                                0x80, // 显示 8
  31. //                                                                                                0xf8, // 显示 7
  32. //                                                                                                0x82, // 显示 6
  33. //                                                                                                0x92, // 显示 5
  34. //                                                                                                0x99, // 显示 4
  35. //                                                                                                0xb0, // 显示 3
  36. //                                                                                                0xa4, // 显示 2
  37. //                        0xf9, // 显示 1
  38. //                                                                                                0xc0, // 显示 0
  39. //                               };      

  40.        
  41. void delay(unsigned int xms)  //    延时xms
  42. {
  43.     unsigned int x,y;
  44.     for(x=xms;x>0;x--)
  45.         for(y=110;y>0;y--);
  46. }


  47.                                                                                                                          
  48. int main()
  49. {
  50. int i1=0,i2=0,a ,cnt=0,i3=0,i4=0,cnt1,b,c=1,d=0,i5=0,i6=0,i7=0,kcnt=0;

  51. // Init               
  52.                 key_Init();    //按键初始化
  53.                  BUZ_Init();           //蜂鸣器初始化
  54.                 LED_Init();            //LED初始化

  55.   while(1)
  56.         {
  57.                 {//
  58.     delay(1);
  59.           i1++;
  60.     i2++;
  61.           i3++;
  62.     i4++;
  63.                 i5++;
  64.                 i6++;
  65.                 i7++;
  66.           //TimerBase_TaskA++;
  67.                 }

  68. // Tasks

  69. // Task  每次按下按键次数
  70.                 if(i5>20&& KEY1_DOWN==0 )
  71.                 { i5=0;       
  72.                         // beep = ~beep;
  73.                         delay(5);
  74.                         if(         KEY1_DOWN==0)
  75.                 {       
  76.                        
  77.                        
  78.                         kcnt=kcnt+1;

  79.                 }
  80.        
  81.        
  82.   // Task 判断按键按下的奇偶
  83.                 if( kcnt%2==0 )       
  84.         {i6=0;
  85.                
  86.                 a=1;    //传递给数码管  使之反向计数
  87.                 b=1;     //  传递给蜂鸣器   使蜂鸣器发出声音
  88.                 c=1;     //   将数码管正向计数程序 锁死
  89.                 cnt1 = cnt ;    //读取cnt的值   
  90.                 cnt=0;        //清除正向计数的值
  91.         }
  92.            else
  93.                 { i6=0;
  94.                        
  95.                         a=0;   // 将数码管反向计数程序   锁死
  96.                         b=0;   //传递给蜂鸣器   使蜂鸣器没有声音
  97.                          c=0;   //传递给数码管  使之正向计数
  98.                         cnt=0;     
  99.                         cnt1=0;    //清除反向计数的值
  100.                 }
  101.                 while(KEY1_DOWN==0);
  102.         }
  103.                
  104.                
  105.                
  106.     // Task 数码管正向计数                
  107.                 if((i1 > 50000) && (c==0))               
  108.                 {
  109.                         i1=0;
  110.       
  111.                         if(cnt > 9)        // 产生从cnt 0~9循环
  112.                         {         
  113.                                 cnt =0;
  114.                
  115. //                        a=0;   // 将数码管反向计数程序   锁死
  116. //                        b=1;   //传递给蜂鸣器   使蜂鸣器有声音
  117.                         }
  118.                                
  119.                         GPIO_Write(GPIOC, shumaguan_Tab[cnt]);
  120.                        
  121.                         cnt++;
  122.                
  123.                 }
  124.                
  125.                

  126. // Task 数码管反向计数       
  127.                 if(i3 > 50000&&a==1)
  128.                 {
  129.                         i3=0;
  130.                                
  131.                 if(cnt1 <0)        // 产生从cnt1 0~9循环
  132.                         {         
  133. //                       
  134. //                      b=1;     //  传递给蜂鸣器   发出声音
  135. //                      c=0;     // 开始正向计数
  136.                                 cnt1=0;
  137.                         }
  138.                                                   
  139.                         GPIO_Write(GPIOC, shumaguan_Tab[cnt1]);

  140.                         cnt1--;         
  141.                         //b=0;
  142.        }
  143.                
  144.      

  145.                          // Task 翻转时蜂鸣器发出声音
  146.                 if(i2 > 10 )
  147.                 {i2=0;       
  148.        if(  b==1)
  149.                          {
  150.                                 c=1;
  151.                           a=1;        //反向计数
  152.                                  d=1;
  153.                         beep = ~beep;// 产生固定频率
  154.                    }
  155.          
  156.           }
  157.                
  158.                 //清零蜂鸣器
  159.                         if(i7 > 50000&& d==1 )   
  160.                 {       
  161.        i7=0;
  162.                                 b=0;
  163.           }
  164.                
  165.                
  166.                                                                            
  167.                

  168.             
  169.          

  170.     // Task D       
  171.         /*        if(i4 > 10)
  172.                 {i4=0;
  173.                
  174.                        
  175.                                 if(d==1)
  176.                         {
  177.                                 a=0;
  178.                           c=0;
  179.                                   beep = ~beep; // 产生固定频率
  180.         cnt =0;
  181.                                 d=0;
  182.                   }
  183.                                                 
  184.           }*/
  185. }
  186.        
  187. }
  188.        
  189.        
复制代码

所有资料51hei提供下载:
第三次数码管 立即反转.rar (264.71 KB, 下载次数: 56)
回复

使用道具 举报

ID:1 发表于 2018-11-7 17:42 | 显示全部楼层
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

ID:412827 发表于 2018-11-7 17:47 | 显示全部楼层
admin 发表于 2018-11-7 17:42
补全原理图或者详细说明一下电路连接即可获得100+黑币

在哪补全..
回复

使用道具 举报

ID:1 发表于 2018-11-7 17:57 | 显示全部楼层
回帖框右侧的高级模式可以上图
回复

使用道具 举报

ID:412827 发表于 2018-11-13 23:06 | 显示全部楼层
原理图.doc (335.5 KB, 下载次数: 23)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表