找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2804|回复: 1
收起左侧

基于stm32的开关控制led和数码管的显示和proteus仿真

[复制链接]
ID:379457 发表于 2021-4-30 03:05 | 显示全部楼层 |阅读模式
KEIL5做的,当数码管数值高于1时,led灯会亮,回到0时灯灭。proteus仿真。
51hei.png 51hei.png P_{4EHWI~MU(37HUAQL2ZBG.png @8LDGG(R_}DQ2E0YXYEU$CQ.png

单片机源程序如下:
  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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:915610 发表于 2021-5-12 19:06 | 显示全部楼层
为什么proteus仿真只能第一个数码管可以栋呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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