📄 dspctrl.c
字号:
#include "DSP28_Device.h"
unsigned long fff = 0x31F; //Q3
// 主函数
void main(void)
{
unsigned long i;
for(i=0; i<0xFFFFF; i++); //系统开机延迟时间
InitSysCtrl(); //系统初始化
// 将中断服务程序放在L0SRAM中运行
memcpy( &isr_runstart, &isr_loadstart, &isr_loadend - &isr_loadstart);
// 将flash配置程序放在L0SRAM中运行
memcpy( &secureRamFuncs_runstart, &secureRamFuncs_loadstart, &secureRamFuncs_loadend - &secureRamFuncs_loadstart);
InitFlash();
// 配置中断
DINT;
IER = 0x0000;
IFR = 0x0000;
// 开中断
// IER |= M_INT2; //开事件管理器的周期中断,比较中断
// IER |= M_INT3;
// IER |= M_INT4;
// IER |= M_INT5;
// IER |= M_INT6;
// IER |= M_INT9; //开SCI的读写中断
// 初始化扩展中断
InitPieCtrl();
// 设置扩展中断向量表
InitPieVectTable();
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// 配置外设
InitPeripherals();
Max7219_Initial();
// 喂狗
for(;;)
{
KickDog();
Max7219_Display_char(fff);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
//>>数据传输格式.<</
void Max7219_Led(unsigned char add1,unsigned char data1)
{
unsigned char bitter=0x80,i=0;
GpioDataRegs.GPBDAT.bit.GPIOB1=0; //LOAD GPIOB1
for(i=0;i<8;i++)
{
GpioDataRegs.GPBDAT.bit.GPIOB2=0;
if((add1&bitter)==bitter)
{
GpioDataRegs.GPBDAT.bit.GPIOB0=1; //DIN GPIOB0
}
else
{
GpioDataRegs.GPBDAT.bit.GPIOB0=0;
}
GpioDataRegs.GPBDAT.bit.GPIOB2=1; //CLK GPIOB2
bitter=bitter>>1;
}
bitter=0x80;
for(i=0;i<8;i++)
{
GpioDataRegs.GPBDAT.bit.GPIOB2=0;
if((data1&bitter)==bitter)
{
GpioDataRegs.GPBDAT.bit.GPIOB0=1;
}
else
{
GpioDataRegs.GPBDAT.bit.GPIOB0=0;
}
GpioDataRegs.GPBDAT.bit.GPIOB2=1;
bitter=bitter>>1;
}
GpioDataRegs.GPBDAT.bit.GPIOB1=1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 0~9,blank,-,H,E,L,P */
void Max7219_Initial()
{
unsigned long i;
Max7219_Led(0xff,1); //数码管全点亮,时长10ms;
for(i=0;i<0xFFD180;i++); //闪1s
Max7219_Led(0xff,0);
Max7219_Led(0xfb,0x7); //数码官全部可以显示。
Max7219_Led(0xfa,0x6); //数码官亮度为最大。
Max7219_Led(0xf9,0xff); //BCD码是显示,每一位代表一个数码位是否译码显示,但只有四种工作方式:00,01,0f,ff
Max7219_Led(0xfc,1); //关断模式,D0=1通常选择操作状态
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 0~9,a,b,c,d,e,f,-,blank */
void Max7219_Display(unsigned char t,unsigned char * p) //t为要显示的数码管位.p为要显示的值,dp为是否有小数点
{
unsigned char m1,n1;
unsigned char pt;
Max7219_Led(0xf9,0x00);
if(t==2)
pt =0x80;
else
pt =0x0;
switch (* p)
{
case 0x0:{m1=t;n1=0x7E|pt;}break;
case 0x1:{m1=t;n1=0x30|pt;}break;
case 0x2:{m1=t;n1=0x6D|pt;}break;
case 0x3:{m1=t;n1=0x79|pt;}break;
case 0x4:{m1=t;n1=0x33|pt;}break;
case 0x5:{m1=t;n1=0x5B|pt;}break;
case 0x6:{m1=t;n1=0x5F|pt;}break;
case 0x7:{m1=t;n1=0x70|pt;}break;
case 0x8:{m1=t;n1=0x7F|pt;}break;
case 0x9:{m1=t;n1=0x7B|pt;}break;
case 0xa:{m1=t;n1=0x77|pt;}break;
case 0xb:{m1=t;n1=0x1F|pt;}break;
case 0xc:{m1=t;n1=0x0D|pt;}break;
case 0xd:{m1=t;n1=0x3D|pt;}break;
case 0xe:{m1=t;n1=0x4F|pt;}break;
case 0xf:{m1=t;n1=0x47|pt;}break;
case 'h':{m1=t;n1=0x17|pt;}break;
case 'l':{m1=t;n1=0x0E|pt;}break;
case 'p':{m1=t;n1=0x67|pt;}break;
case ' ':{m1=t;n1=0x00|pt;}break;
case '-':{m1=t;n1=0x01|pt;}break;
}
Max7219_Led(m1,n1);
}
void Max7219_Display_char(unsigned long f1)
{
int i;
unsigned long j;
unsigned char k;
unsigned long result;
unsigned char p[4] ={0};
unsigned char *pp;
result =(f1>>3) *10;
if(result>=10000)
{
}
else
// {
{
i=0;
while(result>0)
{
p[i] = result%10;
result = result/10;
i++;
}
}
pp = p;
for(k=0;k<4;k++)
{
Max7219_Display(k+1,pp);
pp++;
Max7219_Led(5,0x01);
}
for(j=0;j<0xFFFFFF;j++);
pp = p;
for(k=0;k<4;k++)
{
Max7219_Display(k+1,pp);
pp++;
Max7219_Led(5,0x0);
}
for(j=0;j<0xFFFFFF;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -