利用STM32和C51程序实现流水灯

目录

一.C51编程运行

     1、  安装keil5 C51

二.开发环境搭建

三.STM32编程和运行

      1.程序编写

2.仿真结果

四.总结


安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单的通过寄存器方式,用某一个GPIO端口点亮LED等程序。

一.C51编程运行

     1、  安装keil5 C51

       http://t.csdn.cn/qbRVt

      之前单片机下载过,因此可以借鉴上面链接下载 

    2、新建C51工程

 新建工程,选择‘AT89C51'

然后“file”中新建,保存为main.c。

在main.c中编写以下程序

 

3.编译及仿真

点击魔法棒,选择“output”,勾选 “create hex file” ,生成.hex文件 

然后点击左上角“build"进行编译

编译完成后,打开Proteus8.9,新建工程

完成后,连接电路,并将生成的.hex文件放入

然后运行。

二.开发环境搭建

   安装MDK5

在keil MDK官网中下载

https://armkeil.blob.core.windows.net/eval/C51V961.EXE

在填写必要的信息后,进行安装。

安装操作

1.右键keil5,”以管理员身份运行“

2.进入软件,点击”file“里面选择”License Management"

进入后,复制CID

然后将认证号里面填入(将杀毒软件全关闭,不然打不开)

将C51改成ARM,然后点击“Generate”生成激活码,复制放入keil中即可完成安装。

新建一个工程

 点击"project",然后点击"new project"

然后输入名称,保存,选择芯片

三.STM32编程和运行

      1.程序编写

  新建STM32工程

点击”new project“,选择芯片选择”STM32F103C8“

弹出上面这个窗口后直接”ok"

然后将“startup_stm32f10x_md_s"加入source group中

将文件类型改为”all files“不然可能找不到

然后点击add new item to group "source Group 1"新建一个文本编译

然后在新建的文本中,写入以下程序

#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800

#define RCC_APB2ENR (*(unsigned int *)0x40021018)//时钟控制地址

#define GPIOB_CRL (*(unsigned int *)0x40010C00)//PB端口低位控制地址
#define GPIOC_CRH (*(unsigned int *)0x40011004)//PC端口高位控制地址
#define GPIOA_CRL (*(unsigned int *)0x40010800)//PA端口低位控制地址

#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
	


void SystemInit(void);
void Delay_ms(volatile  unsigned  int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void D_LED_LIGHT(void);
void E_LED_LIGHT(void);
void Delay_ms( volatile  unsigned  int  t) //延时函数
{
     unsigned  int  i;
         for (i=0;i<t;i++)
	{
		
	}
}

void A_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	
	GPIOB_ODR=0x0<<0;		//PB0低电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void B_LED_LIGHT(){
	GPIOA_ODR=0x0<<4;		//PA4低电平
	
	GPIOB_ODR=0x1<<0;		//PB0低电平
	GPIOC_ODR=0x1<<15;		//PC15高电平
}
void C_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4高电平
	
	GPIOB_ODR=0x1<<0;		//PB0高电平
	GPIOC_ODR=0x0<<15;		//PC15低电平	
}

void D_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;	
	GPIOB_ODR=0x1<<0;		
	GPIOC_ODR=0x1<<15;		//全为高电平	
}
void E_LED_LIGHT()
{
	GPIOA_ODR=0x0<<4;		
	
	GPIOB_ODR=0x0<<0;		
	GPIOC_ODR=0x0<<15;//全为低电平
}

int main(){
	
	// 开启时钟
	RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟
	RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟
	RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟
	
	
	
	// 设置 GPIO 为推挽输出
	GPIOB_CRL&=  0xfffffff0;	//设置位 清零		
	GPIOB_CRL|=  0x00000002;  //PB0推挽输出

	GPIOC_CRH &= 0x0fffffff; //设置位 清零		
	GPIOC_CRH|=  0x30000000;  //PC15推挽输出


	GPIOA_CRL &= 0xfff0ffff; //设置位 清零		
	GPIOA_CRL|=  0x00010000; //PA4推挽输出
	

	//初始化
	GPIOB_ODR |= (1<<0); 
	GPIOC_ODR |= (1<<15); 
	GPIOA_ODR |= (1<<4);  
	
	while(1){
		
		A_LED_LIGHT();
		Delay_ms(1000000);

		B_LED_LIGHT();
		Delay_ms(1000000);

		C_LED_LIGHT();
		Delay_ms(1000000);
		
		
		D_LED_LIGHT();
		Delay_ms(1000000);
		
		E_LED_LIGHT();
		Delay_ms(1000000);
	}
	
}


void SystemInit(){
	
}//骗过编译器
2.仿真结果

 上一步运行成功过,创建了.hex文件,然后新建工程,连接电路,

然后运行成功

四.总结

 此次实验中,遇到软件下载问题,查阅其他资料解决后,在运行出错后,看明原因后,在csdn上面查询,解决后,吸取了很多知识,也懂了许多。最后成功利用C51和STM32实现流水灯的编译与仿真。

参考文献: ARM开发:使用MDK编译stm32简单程序(闪烁LED)_stm32点亮led灯的mdk-arm_网盘已清空,链接已失效的博客-CSDN博客STM32和C51程序的设计与仿真(点亮LED灯)_在下摸鱼怪的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值