stem32 程式編譯和proteus模擬
基於keil、proteus軟體的程式編譯和模擬
stm32程式編譯
1.建立一個新的工程檔案
2.選擇晶片並設定
4.編譯程式
設定工程,勾選create hex file
程式如下所示:
include "public.h" //¹«¹²º¯ÊýÍ·Îļþ
int main()
{
LED_Init(); //LED¶Ë¿Ú¼°Ê±ÖÓ³õʼ»¯
while(1)
{
led_display(); //ledÏÔʾ
}
}
#ifndef _public_H
#define _public_H
#include "stm32f10x.h"
#include "led.h"
#endif
#include "led.h"
void delay(u32 i)
{
while(i--);
}
void LED_Init() //¶Ë¿Ú³õʼ»¯
{
GPIO_InitTypeDef GPIO_InitStructure; //ÉùÃ÷Ò»¸ö½á¹¹Ìå±äÁ¿£¬ÓÃÀ´³õʼ»¯GPIO
SystemInit(); //ʱÖÓ³õʼ»¯
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
/* ÅäÖÃGPIOµÄģʽºÍIO¿Ú */
GPIO_InitStructure.GPIO_Pin=LED; //Ñ¡ÔñÄãÒªÉèÖõÄIO¿Ú
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //ÉèÖÃÍÆÍìÊä³öģʽ
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //ÉèÖô«ÊäËÙÂÊ
GPIO_Init(GPIOC,&GPIO_InitStructure); /* ³õʼ»¯GPIO */
}
void led_display()
{
GPIO_SetBits(GPIOC,LED);
delay(6000000);//ÑÓʱԼΪ1s
GPIO_ResetBits(GPIOC,LED);
delay(6000000);
}
編譯成功
proteus電路模擬
原始碼
/*************************
s1:Äϱ± ºì ¶«Î÷ ÂÌ
s2:Äϱ± ºì ¶«Î÷ »Æ k1Çл»Ä£Ê½
s3:Äϱ± ÂÌ ¶«Î÷ ºì
s4:Äϱ± »Æ ¶«Î÷ ºì
*************************/
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define count 50000
#define TH_0 (65536-count)/256
#define TL_0 (65536-count)%256
sbit ew_led_r=P3^0;
sbit ew_led_y=P3^1;
sbit ew_led_g=P3^2;
sbit ns_led_r=P3^3;
sbit ns_led_y=P3^4;
sbit ns_led_g=P3^5;
sbit bit_0=P2^0;
sbit bit_1=P2^1;
sbit k1=P2^2;
sbit k2=P2^3;
sbit k3=P2^4;
sbit k4=P2^5;
uchar code duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar sec=30;
uchar flag=1;
uchar temp=30;
void delay(uint iii)
{
while(iii--);
}
void display()
{
if(flag==1||flag==2) //״̬1ºÍ״̬2£¬¶«Î÷±ÈÄϱ±ÉÙ2Ãë
{
bit_0=0;bit_1=1;
P0=duanxuan[sec%10];
delay(100);P0=0x00;
if(sec>2)
{
P1=duanxuan[(sec-2)%10];
delay(200);P1=0x00;
}
else
{
P1=duanxuan[sec%10];
delay(200);P1=0x00;
}
bit_0=1;bit_1=0;
P0=duanxuan[sec/10];
delay(100);P0=0x00;
if(sec>2)
{
P1=duanxuan[(sec-2)/10];
delay(200);P1=0x00;
}
else
{
P1=duanxuan[sec/10];
delay(200);P1=0x00;
}
}
else if(flag==3||flag==4)//״̬3ºÍ״̬4£¬Äϱ±±È¶«Î÷ÉÙ2Ãë
{
bit_0=0;bit_1=1;
P1=duanxuan[sec%10];
delay(100);P1=0x00;
if(sec>2)
{
P0=duanxuan[(sec-2)%10];
delay(200);P0=0x00;
}
else
{
P0=duanxuan[sec%10];
delay(200);P0=0x00;
}
bit_0=1;bit_1=0;
P1=duanxuan[sec/10];
delay(100);P1=0x00;
if(sec>2)
{
P0=duanxuan[(sec-2)/10];
delay(200);P0=0x00;
}
else
{
P0=duanxuan[sec/10];
delay(200);P0=0x00;
}
}
else if(flag==6||flag==7||flag==8) //·¿ÚͨÐйÜÀí
{
bit_0=0;bit_1=1;
P0=0x3f;
delay(100);P0=0x00;
P1=0x3f;
delay(100);P1=0x00;
bit_0=1;bit_1=0;
P0=0x3f;
delay(100);P0=0x00;
P1=0x3f;
delay(100);P1=0x00;
}
}
void timer_init()
{
TMOD=0x01;
EA=1;ET0=1;TR0=1;
TH0=TH_0;TL0=TL_0;
}
void led_display()
{
if(flag==1) //s1
{
ew_led_r=0;
ew_led_g=1;
ew_led_y=1;
ns_led_r=1;
ns_led_g=0;
ns_led_y=1;
}
else if(flag==2) //s2
{
ew_led_r=0;
ew_led_g=1;
ew_led_y=1;
ns_led_r=1;
ns_led_g=1;
ns_led_y=0;
}
else if(flag==3) //s3
{
ew_led_r=1;
ew_led_g=0;
ew_led_y=1;
ns_led_r=0;
ns_led_g=1;
ns_led_y=1;
}
else if(flag==4) //s4
{
ew_led_r=1;
ew_led_g=1;
ew_led_y=0;
ns_led_r=0;
ns_led_g=1;
ns_led_y=1;
}
else if(flag==5) //»Øµ½s1
{
flag=1;//Ò»¹²Ëĸö״̬
}
else if(flag==6)
{
ew_led_r=1;
ew_led_g=1;
ew_led_y=0;
ns_led_r=1;
ns_led_g=1;
ns_led_y=0;
}
else if(flag==7)
{
ew_led_r=1;
ew_led_g=0;
ew_led_y=1;
ns_led_r=0;
ns_led_g=1;
ns_led_y=1;
}
else
{
ew_led_r=0;
ew_led_g=1;
ew_led_y=1;
ns_led_r=1;
ns_led_g=0;
ns_led_y=1;
}
}
void key()
{
static bit k=0;
static uchar i=0;
if(k==0&&k1==0)
{
delay(1000);
if(k1==0)
{
k=1;
i++;TR0=0;
}
}
if(TR0==0&&k==0&&k2==0&&sec<=60&&(flag==1||flag==2||flag==3||flag==4))
{
delay(1000);
if(k2==0)
{
sec=sec+2;
temp=sec;
k=1;
}
}
if(TR0==0&&k==0&&k3==0&&sec>=20&&(flag==1||flag==2||flag==3||flag==4))
{
delay(1000);
if(k3==0)
{
sec=sec-2;
temp=sec;
k=1;
}
}
if(k==0&&k4==0&&(flag==1||flag==2||flag==3||flag==4))
{
delay(1000);
if(k4==0)
{
TR0=~TR0;
k=1;
}
}
if(k1==1&&k2==1&&k3==1&&k4==1)
{
delay(1000);
if(k1==1&&k2==1&&k3==1&&k4==1)
{
k=0;
}
}
if(i==1)
{
flag=6;
}
if(i==2)
{
flag=7;
}
if(i==3)
{
flag=8;
}
if(i==4)
{
flag=1;
TR0=1;
i=0;
}
}
void main()
{
timer_init();
while(1)
{
display();
led_display();
key();
}
}
void timer0() interrupt 1
{
static uchar jjj=0;
TH0=TH_0;TL0=TL_0;
if(++jjj==20)
{
jjj=0;
sec--;
if(sec==0)
{
sec=temp;
flag++;//s3
}
if(sec-2==0)
{
flag++;//s2 s4
}
}
}
模擬電路
總結
keil設定的時候工程須要勾選生產hex檔案,這次的實驗讓我們學到了MDK5的編譯方式以及如何將模擬工程與程式相結合達到模擬的目的,讓我們能更直觀的看到自己設計的不足和成果。
相關文章
- Proteus模擬執行stm32程式
- Proteus模擬學習筆記筆記
- 關於在ubuntu中用vscode編譯除錯C\C++,Proteus模擬執行stm32程式UbuntuVSCode編譯除錯C++
- Proteus實現簡單51程式的設計與模擬
- 51微控制器競賽設計44例全部帶proteus模擬+程式
- 編譯libpcap模擬器靜態庫編譯PCA
- Ubuntu編譯Android整個系統以及編譯指定模組到模擬器Ubuntu編譯Android
- ROS——無人機ROS模擬包 rotors_simulator 編譯教程ROS無人機編譯
- 如何預編譯 Android 模擬器專用核心編譯Android
- 【硬體】無線感測網實訓——Proteus8模擬工具使用
- proteus模擬數碼管無法動態顯示的問題-解決方法
- Keil的軟體模擬和硬體模擬
- 使用 Raku 編寫簡單的文字識別模擬程式
- 微控制器C語言程式設計實訓100例 基於8051+Proteus模擬 第2版pdfC語言程式設計
- 程式的編譯和連結原理分析編譯
- Android反編譯和程式碼混淆Android編譯
- 關於程式的編譯和連結編譯
- 一個51程式設計和模擬——流水燈程式設計
- 編寫適用於模擬器的 Linux 程式碼(轉)Linux
- 香橙派編譯linux核心支援ebpf和虛擬WIFI編譯LinuxeBPFWiFi
- 使用Reflector和Filedisassembler逆向編譯反編譯.cs.dll檔案程式碼編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 如何編寫計算機模擬器計算機
- 深入理解Java虛擬機器(程式編譯與程式碼優化)Java虛擬機編譯優化
- 開源編譯工具和編譯軟體編譯
- linux下如何模擬按鍵輸入和模擬滑鼠?Linux
- 編譯器的自展和自舉、交叉編譯編譯
- Android反編譯:反編譯工具和方法Android編譯
- 一個有趣的現象(蘋果的bug Or 坑?),關於區分真機和模擬器的預編譯巨集蘋果編譯
- [深入理解Java虛擬機器]第十章 程式編譯與程式碼優化-早期(編譯期)優化Java虛擬機編譯優化
- 高通程式碼編譯編譯
- OCI程式的編譯編譯
- 模擬supervisor的程式管理
- 作業排程模擬程式
- 模擬tap事件和longTap事件事件
- 編譯和分發 Chez Scheme 應用程式編譯Scheme
- 實驗三 程式模擬排程程式
- 實驗三 程式排程模擬程式