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

    科技2025-11-11  9

    文章目录

    一、熟悉mdk开发环境,完成一个stm32的简单程序的编译1、创建工程2、写入源码3、编译运行 二、熟悉Proteus 电路仿真软件,完成一个51程序设计和仿真1、创建工程2、编写keil程序3、绘制电路图4、仿真运行

    一、熟悉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,至此,循环往复,符合预期。

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

    Processed: 0.016, SQL: 8