找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3413|回復(fù): 1
收起左側(cè)

基于stm32的開(kāi)關(guān)控制led和數(shù)碼管的顯示和proteus仿真

[復(fù)制鏈接]
ID:379457 發(fā)表于 2021-4-30 03:05 | 顯示全部樓層 |閱讀模式
KEIL5做的,當(dāng)數(shù)碼管數(shù)值高于1時(shí),led燈會(huì)亮,回到0時(shí)燈滅。proteus仿真。
51hei.png 51hei.png P_{4EHWI~MU(37HUAQL2ZBG.png @8LDGG(R_}DQ2E0YXYEU$CQ.png

單片機(jī)源程序如下:
  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設(shè)置為推挽輸出
  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設(shè)置為推挽輸出
  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;//定義一個(gè)變量
  25.        
  26.         //第一步: 使能LED端口-GPIOA時(shí)鐘
  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.         //第三步:配置端口默認(rèn)電平
  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函數(shù)

  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. }
復(fù)制代碼

所有資料51hei提供下載:
新建文件夾 (5).7z (1.01 MB, 下載次數(shù): 49)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:915610 發(fā)表于 2021-5-12 19:06 | 顯示全部樓層
為什么proteus仿真只能第一個(gè)數(shù)碼管可以棟呀
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表