目录
对于松翰芯片的学习,网上并未提供太多的案例代码,本人也是通过渠道有幸学习其中一个芯片的机会。对于该系芯片的编程,需要用到其松翰的工程板,烧录器,烧录软件。编程软件需要用到KEIL5(可能需要对应的Pack包,KEIL官方网站没有对应的,学习需要的评论或私信给)。话不多说,直接进入主题。
芯片IO口的基础学习
IO的基本设置
上面的图片大致的显示了芯片的引脚配置,了解即可。当我们查看芯片手册的时候,你会看到有关GPIO的一些设置内容。在这里我给大家整理一下。对于GPIO的设置请看下面的代码;
void GpioInit()
{
//用户在用C语言编写的时候,必须按照这个顺序编写设置系统时钟
CKCON = 0x70;
CLKSEL = 0x05;
CLKCMD = 0x69;
CKCON = 0x00;
//芯片IO口的设置,P0,P1,P2
//其中P1口有唤醒使能P1W
P0=0xff;//输出高低电平控制,POM相应位使能
P0M=0xff;//定义输入0输出1。
P0UR=0x00;//内置上拉电阻控制,禁止0使能1,IO口为输出模式是建议禁止
P1=0x00;
P1M=0x00;
P1UR=0x00;
P1W=0x00;//唤醒禁用0,使能1
P2=0x00;
P2M=0x00;
P2UR=0x00;
}
P0,P1,P2口的设置,你可以默认理解与P0M对应进行使能。上面我所设置的可以理解为,P0口的引脚设置为输出脚,具体高电平导通还是低电平导通,看硬件电路。只需要知道设置的该引脚为输入还是输出。
利用IO点亮LED灯(基础学习)
前面说完IO口的设置,那么现在就要学习一下基础的点亮LED开始(点亮太简单了,下面是闪烁,可能软件延时写的不好。)
#include<SN8F5702.H>
/*
SN8F5702芯片只有P0.0-P0.7,P1.0-P1.7,P2.0-P2.1引脚
*/
sbit LED=P0^0;
#define uint unsigned int
#define uchar unsigned char
uint i,k;
void delay(uchar j)
{
for(i=j;i>0;i--)
for(k=0;k<2000;k++);
}
void GpioInit()
{
//用户在用C语言编写的时候,必须按照这个顺序编写设置系统时钟
CKCON = 0x70;
CLKSEL = 0x05;
CLKCMD = 0x69;
CKCON = 0x00;
//芯片IO口的设置,P0,P1,P2
//其中P1口有唤醒使能P1W
P0=0x01;//输出高低电平控制,POM相应位使能
P0M=0x01;//定义输入0输出1。
P0UR=0x00;//内置上拉电阻控制,禁止0使能1
P1=0x00;
P1M=0x00;
P1UR=0x00;
P1W=0x00;//唤醒禁用0,使能1
P2=0x00;
P2M=0x00;
P2UR=0x00;
}
void main()
{
GpioInit();
while(1)
{
LED=0;//灭
delay(50000);
LED=1;
delay(50000);//一直循环亮灭
}
}
关于LED灯的控制,有许多(例如软件延时控制闪烁,控制闪烁次数,流水灯,中断控制LED灯1s(自定)闪铄,中断控制呼吸,中断控制闪烁次数),在下次说中断的时候给出。接下来说一下流水灯吧。
流水灯的设置
SN8F5802芯片的流水灯跟我们了解到得51单片机不一样(通过设置某个口进行移位就可以进行流水)可能我写的代码不对,有想法的自己验证。话不多说,上代码。
#include<SN8F5702.H>
/*
SN8F5702芯片只有P0.0-P0.7,P1.0-P1.7,P2.0-P2.1引脚
*/
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
#define uint unsigned int
#define uchar unsigned char
uint a,k;
void delay(uchar j)
{
for(a=j;a>0;a--)
for(k=0;k<2000;k++);
}
void GpioInit()
{
//用户在用C语言编写的时候,必须按照这个顺序编写设置系统时钟
CKCON = 0x70;
CLKSEL = 0x05;
CLKCMD = 0x69;
CKCON = 0x00;
//芯片IO口的设置,P0,P1,P2
//其中P1口有唤醒使能P1W
P0=0xff;//输出高低电平控制,POM相应位使能
P0M=0xff;//定义输入0输出1。
P0UR=0x00;//内置上拉电阻控制,禁止0使能1
P1=0x00;
P1M=0x00;
P1UR=0x00;
P1W=0x00;//唤醒禁用0,使能1
P2=0x00;
P2M=0x00;
P2UR=0x00;
}
void led(uint num,uint val)
{
switch(num)
{
case 0:
val?(LED1=1):(LED1=0);
break;
case 1:
val?(LED2=1):(LED2=0);
break;
case 2:
val?(LED3=1):(LED3=0);
break;
case 3:
val?(LED4=1):(LED4=0);
break;
case 4:
val?(LED5=1):(LED5=0);
break;
case 5:
val?(LED6=1):(LED6=0);
break;
case 6:
val?(LED7=1):(LED7=0);
break;
case 7:
val?(LED8=1):(LED8=0);
break;
}
}
uint i;
void main()
{
GpioInit();
LED1=0,LED2=0,LED3=0,LED4=0,LED5=0,LED6=0,LED7=0,LED8=0;
while(1)
{
for(i=0;i<8;i++)
{
delay(50000);
led(i,1);
delay(50000);
led(i,0);
}
}
}
有关硬件烧录等请看下图。