辉芒微教程第二篇《程序基本架构与点灯,延时函数》

13 篇文章

已下架不支持订阅

目录

前言

一、程序的基本结构

二、点灯

三、延时函数

四、闪烁的LED灯


第0篇:  辉芒微开源电路板链接.立创PCB

第1篇:  辉芒微教程第一篇《软件的安装与程序下载》

第2篇:  辉芒微教程第二篇《程序基本结构与点灯,延时函数》

第3篇:  辉芒微教程第三篇《IO口输入设置与按键切换继电器状态》

第4篇:  辉芒微教程第四篇《EEPROM-断电记忆开关状态》

第5篇:  辉芒微教程第五篇《定时器0实现LED灯的闪烁》

第6篇:  辉芒微教程第六篇《定时器1和定时器2多个定时器混用》

第7篇:  辉芒微教程第七篇《PWM是什么与PWM3调节LED灯的亮度》

第8篇:  辉芒微教程第八篇《PWM4/PWM5调节舵机的角度》

第9篇:  辉芒微教程第九篇《模拟串口打印数据》

第10篇:辉芒微教程第十篇《串口打印实战-EEPROM记忆日志数据打印》

第11篇:辉芒微教程第十一篇《ADC读取电压并且打印出来-简易万用表》

第12篇:辉芒微教程第十二篇《项目综合开发结构布置ADC的程序》

第13篇:辉芒微教程第十三篇《看门狗的设置》

第14篇:辉芒微教程第十四篇《辉芒微外部中断实验》

第15篇:辉芒微教程第十五篇《辉芒微IIC实验》

第16篇:辉芒微教程第十六篇《辉芒微SPI实验》

第17篇:辉芒微教程第十七篇《辉芒微量产工作需要用哪些软件与做哪些工作》

第18篇:辉芒微教程第十八篇《辉芒微开发其他芯片说明》

前言

        本篇章将讲解辉芒微的基本程序架构以及进行点灯,延时函数的编程,以及将两节进行结合编写一个基本的闪烁LED,由于辉芒微的寄存器与51那种寄存器有些不一样,所以还是单独开一章节来讲寄存器的配置,好帮助大家理解辉芒微。

一、程序的基本结构

#include	"SYSCFG.h"                //这个芯片的必要头文件

void interrupt ISR(void)              //中断函数,本节无需要
{
}

void SingleChipConfig(void)		      //单片机配置函数
{

}

void main(void)                       //主函数
{
	SingleChipConfig();
	while(1)
    {
		
    }
}

这个是我简化后的主函数框架,与新建工程的还是有所不一样的,大家可以参考我的来编程

(1) "SYSCFG.h": 这是一个必要的库函数文件,这里面包括了芯片的很多寄存器宏定义等等。

(2)interrupt ISR:这个是中断函数,外部中断,或者定时器中断等等都写到这,本篇无需用到,所以这里面空着就好了。

(3)SingleChipConfig:单片机配置函数,用于初始化IO,时钟等等的一些参数配置。

(3)main:我们的主函数。

二、点灯

接下来我们开始进行点灯

(1)分析LED灯的原理图

       
在我们原理图中,板载上的LED灯连着PC4管脚,并且我们的LED另一端连着GND,所以只要在左端提供一个3.3V的电平,那么LED灯就会亮,所以我们使PC4输出高电平灯亮,输出低电平灭。

(2)配置SingleChipConifg函数,配置时钟以及初始化IO等等

#include	"SYSCFG.h"                //这个芯片的必要头文件

void interrupt ISR(void)              //中断函数,本节无需要
{
}

void SingleChipConfig(void)		      //单片机配置函数
{
	OSCCON = 0B01110001;	//IRCF=111=16MHz/2T=8MHz,0.125us
	INTCON = 0;  			//暂禁止所有中断
	PORTA = 0B00000000;		
	TRISA = 0B00000000;		//PA输入输出 0-输出 1-输入
	PORTC = 0B00000000; 	
	TRISC = 0B00000000;		//PC输入输出 0-输出 1-输入  
	WPUA = 0B00000000;     	//PA端口上拉控制 1-开上拉 0-关上拉
	WPUC = 0B00010000;     	//PC端口上拉控制 1-开上拉 0-关上拉

	OPTION = 0B00001000;	//Bit3=1,WDT MODE,PS=000=WDT RATE 1:1
    MSCKCON = 0B00000000;
    //Bit6->0,禁止PA4,PC5稳压输出
	//Bit5->0,TIMER2时钟为Fosc
	//Bit4->0,禁止LVR       
	CMCON0 = 0B00000111; 	//关闭比较器,CxIN为数字IO口
}

void main(void)             //主函数
{
	SingleChipConfig();
    PC4 = 1;				//使PC4端口输出高电平(1:高电平,0:低电平)
	while(1)
    {
		
    }
}

(3)函数说明解释

        这里我们暂且不去关注其他寄存器是什么意思,我们只讲关于跟本篇最主要的关系的几个寄存器,PORTA,TRISA,PORTC,TRISC,WPUA,WPUC;

寄存器说明
1PORTA端口A数据寄存器(Port Data Register)
2TRISA端口A方向控制寄存器(Tri-State Control Register)
3PORTC端口C数据寄存器(Port Data Register)
4TRISC端口C方向控制寄存器(Tri-State Control Register)
5WPUAA弱上拉电阻控制寄存器(Weak Pull-Up Register)
6WPUCC弱上拉电阻控制寄存器(Weak Pull-Up Register)

a.由于我们这里只到了C端口,所以这里我们无需配置A端口的所有寄存器,设置成0B00000000,0B表示二进制,8位从左到右表示PA7~PA0,C端口也如此类推;

b.我们本节要用到PC4,并且输出高电平点亮LED灯

所以按如下配置来(0B后面的8位从左到右表示PC7~PC0)

PORTC = 0B00000000;    设置PC4成低电平

TRISC  =  0B00000000; 设置PC4为输出模式(0输出,1输入)

WPUC  =  0B00010000;    设置PC4(1-开上拉 0-关上拉),这里上不上拉都没关系,毕竟是输出

c.将上面配置好的程序,下载到我们的板子,得到如下效果

三、延时函数

/*------------------------------------------------- 
* 函数名称:DelayUs
* 功能:    短延时函数 --16M-2T--大概快1%左右.
* 输入参数:Time延时时间长度 延时时长Time us
* 返回参数:无 
 -------------------------------------------------*/
void DelayUs(unsigned char Time)
{
	unsigned char a;
	for(a=0;a<Time;a++)
	{
		NOP();
	}
}                  
/*-------------------------------------------------
* 函数名称:DelayMs
* 功能:    短延时函数
* 输入参数:Time延时时间长度 延时时长Time ms
* 返回参数:无 
 -------------------------------------------------*/
void DelayMs(unsigned char Time)
{
	unsigned char a,b;
	for(a=0;a<Time;a++)
	{
		for(b=0;b<5;b++)
		{
		 	DelayUs(197); 	//快1%
		}
	}
}

        上面这个是辉芒微官方的一个延时函数,注意这里的DelayUs不能用作精准的DelayUs,它只是作为DelayMs的一个辅助运算函数,说人话就是如果你用来DelayUs延时它是不准的,只有DelayMs才算精准。例如你只能DelayMs(100);但是不能DelayUs(100);

四、闪烁的LED灯

        基于上面的毫秒延时函数,我们把这两个延时函数写到程序中,实现灯的闪烁效果。

#include	"SYSCFG.h"                //这个芯片的必要头文件

/*------------------------------------------------- 
* 函数名称:DelayUs
* 功能:    短延时函数 --16M-2T--大概快1%左右.
* 输入参数:Time延时时间长度 延时时长Time us
* 返回参数:无 
 -------------------------------------------------*/
void DelayUs(unsigned char Time)
{
	unsigned char a;
	for(a=0;a<Time;a++)
	{
		NOP();
	}
}                  
/*-------------------------------------------------
* 函数名称:DelayMs
* 功能:    短延时函数
* 输入参数:Time延时时间长度 延时时长Time ms
* 返回参数:无 
 -------------------------------------------------*/
void DelayMs(unsigned char Time)
{
	unsigned char a,b;
	for(a=0;a<Time;a++)
	{
		for(b=0;b<5;b++)
		{
		 	DelayUs(197); 	//快1%
		}
	}
}

void interrupt ISR(void)              //中断函数,本节无需要
{
}

void SingleChipConfig(void)		      //单片机配置函数
{
	OSCCON = 0B01110001;	//IRCF=111=16MHz/2T=8MHz,0.125us
	INTCON = 0;  			//暂禁止所有中断
	PORTA = 0B00000000;		
	TRISA = 0B00000000;		//PA输入输出 0-输出 1-输入
	PORTC = 0B00000000; 	
	TRISC = 0B00000000;		//PC输入输出 0-输出 1-输入  
	WPUA = 0B00000000;     	//PA端口上拉控制 1-开上拉 0-关上拉
	WPUC = 0B00000000;     	//PC端口上拉控制 1-开上拉 0-关上拉

	OPTION = 0B00001000;	//Bit3=1,WDT MODE,PS=000=WDT RATE 1:1
    MSCKCON = 0B00000000;
    //Bit6->0,禁止PA4,PC5稳压输出
	//Bit5->0,TIMER2时钟为Fosc
	//Bit4->0,禁止LVR       
	CMCON0 = 0B00000111; 	//关闭比较器,CxIN为数字IO口
}

void main(void)                       //主函数
{
	SingleChipConfig();
	while(1)
    {
		PC4 = 1;				          //使PC4端口输出高电平(1:高电平,0:低电平)
        DelayMs(500);
        PC4 = 0;
        DelayMs(500);
    }
}

编译上面的程序,将代码下载到板子,就可以看到如下的效果。

WeChat

已下架不支持订阅

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值