ARM开发环境入门(stem32的程序编译及c51仿真)

本文介绍了如何使用MDK开发环境编写并编译STM32的简单程序,以及如何在Proteus中进行51单片机的程序设计和电路仿真。STM32程序涉及GPIO初始化和LED控制,而51单片机的仿真则展示了一个简易交通灯系统的实现,包括时间控制和数码管显示。

一、熟悉mdk开发环境,完成一个stm32的简单程序的编译

1、创建工程
  • project–>new project

在这里插入图片描述

  • 选择单片机类型

    可输入STM32F100进行搜索

在这里插入图片描述

  • 完成创建

在这里插入图片描述

2、写入源码
  • led.h

    #ifndef _led_H
    #define _led_H
    #include "stm32f10x.h"
    #define LED GPIO_Pin_All
    void LED_Init(void);
    void led_display(void);
    
    #endif 
    
  • main.c

    int main()
    {	
    	LED_Init();		 
    	while(1)
    	{
    		led_display(); 			
    	}	
    }
    
  • led.c

    #include "led.h"
    void delay(u32 i)	  
    {
    	while(i--);
    }
    void LED_Init()	 
    {
    	GPIO_InitTypeDef GPIO_InitStructure; 
    	SystemInit();
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    
    	GPIO_InitStructure.GPIO_Pin=LED; 
    	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 
    	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  	  GPIO_Init(GPIOC,&GPIO_InitStructure); 	  
    }
    void led_display()
    {
    	GPIO_SetBits(GPIOC,LED);
    	delay(6000000);//ÑÓʱԼΪ1s
    	GPIO_ResetBits(GPIOC,LED);
    	delay(6000000);
    }
    
3、编译运行

在这里插入图片描述

如图所示,编译运行成功无报错。

至此,完成了一个stm32的简单程序的编译

二、熟悉Proteus 电路仿真软件,完成一个51程序设计和仿真

该51程序设计为简易交通灯系统,完成了以下功能:十字路口的交通灯控制系统,四组灯(红黄绿)对应十字路口的四个方向,用两位的数码管显示剩余的时间。

1、创建工程
  • project–>new project

在这里插入图片描述

  • 选择单片机类型

    选择AT89C51

    在这里插入图片描述

  • 完成创建

在这里插入图片描述

2、编写keil程序

源代码如下:

#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char 
uchar seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar stateFlag;
uchar flag;
uchar num1=0;
uchar num2=0;
sbit Led1_G = P1^0;
sbit Led1_Y = P1^1;
sbit Led1_R = P1^2;
sbit Led2_G = P1^3;
sbit Led2_Y = P1^4;
sbit Led2_R = P1^5;
void delay(int a);
void showNum();
void main(){
    Led1_R = 0;
    Led1_G = 0;
    Led1_Y = 0;
    Led2_R = 0;
    Led2_G = 0;
    Led2_Y = 0; 
    stateFlag = 0;
    flag = 0;
    TMOD=0x10;
    TH1= 55536/256;
    TL1=55536%256;
    num1=10;
    num2=13;
    Led1_R = 0;
    Led1_G = 1;
    Led1_Y = 0;
    Led2_R = 1;
    Led2_G = 0;
    Led2_Y = 0; 
    EA=1;
    ET1=1;
    TR1=1;
    while(1){
        showNum();
    }
} 
void int_T1(void) interrupt 3 {
    flag++;
    if(flag==100){
        num1--;
        num2--;
        flag=0;
    }
    if(stateFlag==0){
        if(num1==0){
            Led1_R = 0;
            Led1_G = 0;
            Led1_Y = 1;
            Led2_R = 1;
            Led2_G = 0;
            Led2_Y = 0; 
            num1=3;
        }
        if(num2==0){
            num1=23;
            num2=20;
            Led1_R = 1;
            Led1_G = 0;
            Led1_Y = 0;
            Led2_R = 0;
            Led2_G = 1;
            Led2_Y = 0; 
            stateFlag=1;
        }
    }
    else{
        if(num2==0){
            Led1_R = 1;
            Led1_G = 0;
            Led1_Y = 0;
            Led2_R = 0;
            Led2_G = 0;
            Led2_Y = 1; 
            num2=3;
        }
        if(num1==0){
            num1=10;
            num2=13;
            Led1_R = 0;
            Led1_G = 1;
            Led1_Y = 0;
            Led2_R = 1;
            Led2_G = 0;
            Led2_Y = 0; 
            stateFlag=0;
        }
    }
    TH1=55536/256;
    TL1=55536%256;
}
void delay(int a){
    uchar b;
    for(;a>0;a--){
        for(b=0;b<255;b++);
    }
}
void  showNum(){
       P2=0x0a;
       P0=seg[num1/10];
       P3=seg[num2/10];
       delay(10);
       P2=0x05;
       P0=seg[num1%10];
       P3=seg[num2%10];
       delay(10);
}

编译运行如图,无报错:

在这里插入图片描述

编译成功后,会生成hex文件

3、绘制电路图

根据设计原理进行绘图如下:

在这里插入图片描述

4、仿真运行

编辑51单片机,选择生成的hex文件:

在这里插入图片描述

进行仿真:

在这里插入图片描述

通过实验仿真,东西方向车辆的通行时间(绿灯时间)为10s,缓冲时间(黄灯时间)为3s,此时南北方向车辆处于等红灯状态(红灯时间),时间为13s。当东西方向绿灯结束,南北方向车辆开始通行,南北方向车辆的通行时间(绿灯时间)为20s,缓冲时间(黄灯时间)为3s,此时东西方向车辆处于等红灯状态(红灯时间),时间为23s,至此,循环往复,符合预期。

至此,完成了一个简易交通灯系统的设计和仿真。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值