标题: 基于stm32的开关控制led和数码管的显示和proteus仿真 [打印本页]

作者: 784560921    时间: 2021-4-30 03:05
标题: 基于stm32的开关控制led和数码管的显示和proteus仿真
KEIL5做的,当数码管数值高于1时,led灯会亮,回到0时灯灭。proteus仿真。


单片机源程序如下:
  1. #include "main.h"

  2. uint16_t table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

  3. void key_init()
  4. {
  5.         GPIO_InitTypeDef gpio_init;
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  7.         //将PA设置为推挽输出
  8.         gpio_init.GPIO_Mode=GPIO_Mode_IPU;
  9.         gpio_init.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
  10.         GPIO_Init(GPIOB,&gpio_init);
  11. }

  12. void seg7_init()
  13. {
  14.         GPIO_InitTypeDef gpio_init;
  15.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  16.         //将PA设置为推挽输出
  17.         gpio_init.GPIO_Mode=GPIO_Mode_Out_PP;
  18.         gpio_init.GPIO_Pin=GPIO_Pin_All;
  19.         gpio_init.GPIO_Speed=GPIO_Speed_50MHz;
  20.         GPIO_Init(GPIOA,&gpio_init);
  21. }

  22. void LED_Init()
  23. {
  24.         GPIO_InitTypeDef gpio_init;//定义一个变量
  25.        
  26.         //第一步: 使能LED端口-GPIOA时钟
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  28.        
  29.         //第二步:配置端口的工作模式并初始化
  30.                 gpio_init.GPIO_Mode=GPIO_Mode_Out_PP;
  31.         gpio_init.GPIO_Pin=GPIO_Pin_All;
  32.         gpio_init.GPIO_Speed=GPIO_Speed_50MHz;     //速度:50M
  33.         GPIO_Init(GPIOC,&gpio_init);               //初始化GPIO
  34.         //第三步:配置端口默认电平
  35. }

  36. uint8_t  button0()
  37. {
  38.         return(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0));
  39. }
  40. uint8_t  button1()
  41. {
  42.         return(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));
  43. }
  44. //uint8_t  button3()
  45. //{
  46. //        return(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3));
  47. //}
  48. //uint8_t  button5()
  49. //{
  50. //        return(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5));
  51. //}

  52. /*****************************************
  53.         main函数

  54. *****************************************/
  55. int main(void){
  56.         uint8_t i,j,k=1;
  57.         uint16_t temp;
  58.         LED_Init();
  59.         key_init();
  60.         seg7_init();
  61.         GPIO_Write(GPIOA,table[j-1]);
  62.         while(1){
  63.                
  64.                 if(button0())
  65.                 {
  66.                         delay_ms(10);
  67.                         if(button0())
  68.                         {
  69.                                 while(button0());
  70.                                  j++;
  71.                                 if(j>16)
  72.                                         j=1;
  73.                                 GPIO_Write(GPIOA,table[j-1]);
  74.                         }                       
  75.                 }
  76.                                 if(j>1&k==0)
  77.                         {
  78.                                 delay_ms(10);
  79.                                                                 delay_ms(10);
  80.                                         GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  81.                                                 delay_ms(10);
  82.                                                                         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  83.                                 delay_ms(10);
  84.                                 k++;
  85.                         }
  86.                         if(j==1&k==1)
  87.                         {
  88.                                 delay_ms(10);
  89.                                 GPIO_SetBits(GPIOC,GPIO_Pin_6);
  90.                                                                 delay_ms(10);
  91.                                                                         GPIO_SetBits(GPIOC,GPIO_Pin_7);
  92.                                 k=0;
  93.                                
  94.                         }
  95.                        
  96.                 if(button1())
  97.                 {
  98.                         delay_ms(10);
  99.                         if(button1())
  100.                         {
  101.                                 while(button1());
  102.                                  j--;
  103.                                 if(j==0)
  104.                                         j=16;
  105.                                 GPIO_Write(GPIOA,table[j-1]);
  106.                         }
  107.                 }
  108.                
  109.         }
  110.         //return 0;
  111. }
复制代码

所有资料51hei提供下载:
新建文件夹 (5).7z (1.01 MB, 下载次数: 49)


作者: 冷情戒爱    时间: 2021-5-12 19:06
为什么proteus仿真只能第一个数码管可以栋呀




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1