本帖最后由 aqa 于 2019-8-21 18:40 编辑
新入职了一家公司,负责消费电子,接触到了应广单片机,现在谈谈应广单片机相关的问题,后续还会更新,本人也只是初学者,发现网上应广单片机相关的资料太少了,一是把自己所知道的发出来,帮助像我这样的初学者,方便学习,二是记录自己的学习历程。
先从一些基础的开始吧,有关于IDE的使用我就不多叙述了,资料连接里面有一个文件介绍了怎么使用,需要的也可以下载,目前我所使用的的仅限于应广的单核单片机,所以这边的都是单核的相关资料,应该单片机的开发语言是MINI-C语言,属于汇编和标准C的合体吧,哈哈哈,具体了解可以去网上查相关资料,资料链接里面也有一个开发语言的介绍,下面是一个简单的例程,驱动车载MP3数码管,展示部分程序,需要的可以点击链接下载
/****************************************************************
函数名称:void Set_User_T16(void)
函数功能:定时器计数定时256us
函数参数:无
函数返回值:无
函数说明:
****************************************************************/
#define USER_TIMER_CONFIG() $ T16M IHRC, /4, BIT10
#define ENABLE_TIMER() SET1 INTEN.2 //$ INTEN T16 //开定时器中断
#define DISENABLE_TIMER() SET0 INTEN.2 //关定时器中断
#define INIT_TIMER_VALUE(n) STT16 n//装载定时器计数值
#define CONST_TIMER_VALUE 0
#define EA_INT() ENGINT//开总中断
#define DIS_INT() DISGINT//关总中断
/**************************************************************/
void Set_User_T16(void)/*定时256us进一次中断 2^10/(16/) = 256us*/
{
//SET0 T16flag;//reset the flag
USER_TIMER_CONFIG();
T16val = CONST_TIMER_VALUE;//256us
INIT_TIMER_VALUE(T16val);
INTRQ = 0;//清除INTRQ
EA_INT();
ENABLE_TIMER();
}
/************************************************
中断服务函数
************************************************/
void Interrupt (void)
{
pushaf;
if (Intrq.T16)/*256us进入一次中断*/
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
T16val = CONST_TIMER_VALUE;
INIT_TIMER_VALUE(T16val);
LED_Scan1();
//LED_scan2();
}
popaf;
}
我目前用的是PMS132B芯片驱动的,上面是一个16位计数器写的计数中断程序,计数256us进入一次中断/****************************************************************
函数名称:void LED_Scan(void)
函数功能:扫描函数,扫描要显示13:14,其他图标都亮
函数参数:无
函数返回值:无
函数说明:没有用到的引脚设置为高阻态
if语句里面注释的pbc位所有LED数码管全亮
****************************************************************/
void LED_Scan1(void)
{
static u8 cnt = 0;
SetPortIn();//设置高阻态,关闭上拉
//SetPortOut();
$ pbdier = 0;
switch (cnt)//轮询一个引脚为高电平
{
case 0:
pbc.0 = 1;//设置pb0输出
pb.0 = 1;//输出高电平
break;
case 1:
pbc.1 = 1;
pb.1 = 1;
break;
case 2:
pbc.2 = 1;
pb.2 = 1;
break;
case 3:
pbc.3 = 1;
pb.3 = 1;
break;
case 4:
pbc.4 = 1;
pb.4 = 1;
break;
case 5:
pbc.5 = 1;
pb.5 = 1;
break;
case 6:
pbc.6 = 1;
pb.6 = 1;
break;
default:
break;
}
//将发生变化的引脚所对应要显示的内容更改
if (PIN1)
{
//pbc = 0x3f;
pbc = 0x35;//配置输出引脚 0:输入 1:输出
pb = 0X01;//
}
if (PIN2)
{
//pbc = 0x3f;
pbc = 0x2e;
pb = 0x02;
}
if (PIN3)
{
//pbc = 0x7f;
pbc = 0x7c;
pb = 0x04;
}
if (PIN4)
{
//pbc = 0x3f;
pbc = 0x1b;
pb = 0x08;
}
if (PIN5)
{
//pbc = 0x7f;
pbc = 0x72;
pb = 0x10;
}
if (PIN6)
{
//pbc = 0x7f;
pbc = 0x72;
pb = 0x20;
}
if (PIN7)
{
//pbc = 0x64;
pbc = 0x44;
pb = 0x40;
}
cnt++;
if(cnt >= 7)
{
cnt = 0;
}
//cnt = (cnt >= 8)?0:cnt+1;
}
上面这个是LED数码管动态扫描程序,与一般的数码管有所区别,一般数码管有共阴和共阳之分,这个没有,动态扫描的原理这里不细说了,不清楚的去网上查找,这个相当于是7个引脚驱动五位七段数码管,相关引脚定义见下图
数码管引脚定义图
数码管实物图
引脚定义图是用万用表测出来的,测量方法有很多,我用的这种方法而以,阳极和阴极就代表该引脚接在万用表的正极和负极,每一段LED组合在一起形成以以为数码管,上面有五位数码(第五位是将SD、||、USB、 : 等一共七个图标组成了第五位数码管),举个例子方便大家理解,假如现在要点亮第一位数码管的第一段(也就是1A),此时P1引脚输入高电平,P2引脚输入低电平或者接地,1A就亮了。
以上两个图片是动态扫描程序扫描后所能显示的两种效果,图一在扫描程序里为注释的部分
所用仿真开发板型号
后续还会更新相关的例程,有哪里描述的不对的地方请大佬指点出来,希望本帖子可以帮助到大家,有兴趣的可以留言或者加我QQ464093890一起讨论学习。
需要相关资料的朋友可以点击点击链接下载
IED及其使用手册和MINI-C学习指南链接:https://pan.baidu.com/s/1qZv-5l2WTA_6KwwwEsJ4lA
提取码:u63h
芯片手册链接:https://pan.baidu.com/s/1pACqdmqrCUK-P5cX4qXzDQ
提取码:b2oo
车载MP3数码管.rar
(35.67 KB)
|
专业做应广MCU程序烧录的,请加QQ:1065214078
给力