文章目录
一、熟悉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,至此,循环往复,符合预期。
至此,完成了一个简易交通灯系统的设计和仿真。
本文介绍了如何使用MDK开发环境编写并编译STM32的简单程序,以及如何在Proteus中进行51单片机的程序设计和电路仿真。STM32程序涉及GPIO初始化和LED控制,而51单片机的仿真则展示了一个简易交通灯系统的实现,包括时间控制和数码管显示。
1万+

被折叠的 条评论
为什么被折叠?



