目录
第3篇: 辉芒微教程第三篇《IO口输入设置与按键切换继电器状态》
第4篇: 辉芒微教程第四篇《EEPROM-断电记忆开关状态》
第6篇: 辉芒微教程第六篇《定时器1和定时器2多个定时器混用》
第7篇: 辉芒微教程第七篇《PWM是什么与PWM3调节LED灯的亮度》
第8篇: 辉芒微教程第八篇《PWM4/PWM5调节舵机的角度》
第10篇:辉芒微教程第十篇《串口打印实战-EEPROM记忆日志数据打印》
第11篇:辉芒微教程第十一篇《ADC读取电压并且打印出来-简易万用表》
第12篇:辉芒微教程第十二篇《项目综合开发结构布置ADC的程序》
第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;
| 寄存器说明 | ||
| 1 | PORTA | 端口A数据寄存器(Port Data Register) |
| 2 | TRISA | 端口A方向控制寄存器(Tri-State Control Register) |
| 3 | PORTC | 端口C数据寄存器(Port Data Register) |
| 4 | TRISC | 端口C方向控制寄存器(Tri-State Control Register) |
| 5 | WPUA | A弱上拉电阻控制寄存器(Weak Pull-Up Register) |
| 6 | WPUC | C弱上拉电阻控制寄存器(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);
}
}
编译上面的程序,将代码下载到板子,就可以看到如下的效果。

1485

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



