打印

Proteus8.9 仿真STM32407ZGT6系列003_Keys

[复制链接]
379|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一,    打开模板文件(可以随文下载放置在文档中打开)。(如下图1所示)
图1
二,另存工程文件,添加虚拟仿真Buttons。(如下图2,3所示)
图2
图3
三,点击Source Code标签。(如下图4所示)
图4
四,编辑main.c, key.c, key.h代码。led.c, led.h代码如Proteus8.9 仿真STM32407ZGT6系列001(如下图5所示)
图5
五,Main.c 代码:
#include "stm32f4xx_conf.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#define Oppsit(A) (A!=0)?0:1
u8 i, k=1, t=0;
u8 str[8][17]={  "红灯亮!!!...\r\n",
                                        "红亮灭!!!...\r\n",
                                        "黄灯亮!!!...\r\n",
                                        "黄亮灭!!!...\r\n",
                                        "绿灯亮!!!...\r\n",
                                        "绿亮灭!!!...\r\n",
                                        "灯闪亮!!!...\r\n",
                                        "灯闪灭!!!...\r\n",
                   };
u8 ReadKey(u16 IoBit){
       if(0==GPIO_ReadInputDataBit(GPIOC,IoBit)){
              return 0;
       }
    else{
              delay_us(10);
              if(1==GPIO_ReadInputDataBit(GPIOC,IoBit)) {
                     return1;
              }
              else{
                     return0;
              }
       }
}
int main (void)
{
       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
       delay_init(168);    //初始化延时函数
       uart_init(9600);     //串口初始化
       LED_Init();                           //初始化LED端口
       KEY_Init();                                //按键初始化        
       while(1)
       {
                     if(1==ReadKey(0x0020))k=0;
                     if(1==k){
                            for(t=0;t<16;t++){
                                   USART_SendData(USART1,(u16) str[6][t]);
                                   while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                            }
                            for(i=0;  i<6; i++){
                                          PCout((i/2+1))=Oppsit((i%2));
                                          for(t=0;t<16;t++){
                                                 USART_SendData(USART1,(u16) str[ i][t]);
                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                                          }
                                          delay_ms(500);
                            }
                     }
                     else{
                            for(t=0;t<16;t++){
                                   USART_SendData(USART1,(u16) str[7][t]);
                                   while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                            }
                            while(1!=ReadKey(0x0010));
                            k=1;
                            delay_ms(50);
                     }
       }
}
key.c 代码:
#include "key.h"
#include "delay.h"
void KEY_Init(void)
{
       GPIO_InitTypeDef  GPIO_InitStructure;
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//使能GPIOC时钟
       GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4| GPIO_Pin_5; //KEY0 对应引脚
       GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN;//普通输入模式
       GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;//100M
       GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_DOWN ;//下拉
       GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIOE4
}
key.h 代码:
#ifndef __KEY_H
#define __KEY_H   
#include "sys.h"
#define KEY0              PCin(4)        //PC4
#define KEY1              PCin(5)        //PC5
void KEY_Init(void);    //IO初始化
#endif
六,点击构建工程按钮,编译工程。(如下图6所示)
图6
七,点击窗口左下方仿真按钮,可见红黄绿灯每个0.5s跳闪仿真,按下KEYSTOP键,停止跳闪仿真;按下KEYSTART键,开始跳闪仿真。虚拟串口仿真将单片机红黄绿等亮灭情况打印显示。(如下图7,8,9所示)
图7
图8
图9
八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图10所示)
图10
九,笔者准备的是普中F407ZGT6的核心板,通过普中自动下载软件将Proteus VSM Studio生成的Hex文件下载到开发板上。可见开发板连接的红黄绿灯模块每个0.5s红黄绿灯跳闪,按下7键,停止跳闪仿真;按下1键,开始跳闪仿真(模块接线定义的)。电脑串口将单片机红黄绿等亮灭情况打印显示。(如下图11,12,13,14所示)
图11
图12
图13
图14
.
附件Proteus8.9 仿真STM32407ZGT6系列003_Keys在已安装Proteus8.9的计算机文件夹中打开即可。
需要进一步了解,请加入QQ群:976235464

11.png (291.96 KB )

11.png

使用特权

评论回复

相关帖子

发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

13

帖子

0

粉丝