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); }编译成功
源码
/************************* 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的编译方式以及如何将仿真工程与程序相结合达到仿真的目的,让我们能更直观的看到自己设计的不足和成果。