⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspctrl.c

📁 单个表头的显示 运用了MAX7219驱动芯片
💻 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 + -