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

📄 用dsp实现霓虹灯.txt

📁 一排灯的不同闪烁情况。用一维数组定义五种霓虹灯的闪烁状态。适合初学者。
💻 TXT
字号:
/*******************************************************************/
#include "exp1_2407.h"
/*******************************************************************/
ioport unsigned port8001;
ioport unsigned port8000;
unsigned int num=0;
unsigned int show=0x00AA;
unsigned int a[8]={0x0000,0x00FF,0x0000,0x00FF,0x0000,0x00FF,0x0000,0x00FF};
unsigned int b[8]={0x007F,0x00BF,0x00DF,0x00EF,0x00F7,0x00FB,0x00FD,0x00FE};
unsigned int c[8]={0x0055,0x00AA,0x0055,0x00AA,0x0055,0x00AA,0x0055,0x00AA};
unsigned int d[8]={0x003F,0x00CF,0x00F3,0x00FC,0x003F,0x00CF,0x00F3,0x00FC};
unsigned int e[8]={0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF,0x00FF};//用一维数组定义五种霓虹灯的闪烁状态
int i=0;
void sysini()                   //系统初始化子程序
{
     asm(" setc INTM");         //禁止所有中断
     asm(" setc SXM");          //抑制符号位扩展
     asm(" clrc OVM");          //累加器中结果正常溢出
     * SCSR1=0x81FE;            //配置时钟锁相为4倍频CLKOUT=4*7.3728=29.4912M
     * WDCR=0x00EF;             //禁止看门狗
     * IFR=0xFFFF;              //清除所有中断标志,"写1清0"
}

void timer1ini()                //定时器1初始化子程序
{ 
     * IMR=0x0002;              //使能int2中断
     * EVAIMRA=0x0080;          //使能T1PINT中断
     * EVAIFRA=0xFFFF;          //清EVA中断标志
     * T1PER=0x01CD;            //每1ms产生一次中断
     * T1CNT=0x0000;            //计数器清零
     * T1CON=0x164C;            //连续增计数模式,预分频为64,定时器计时使能,内部时钟,定时器1比较使能
     asm(" clrc INTM");         //开总中断
}

void timer1int()                //定时器1中断子程序
{   
  
    if (num == 200)             //记中断次数200次,产生1秒延时
     {
         num=0;
         switch(0x00ff&port8000)
         {
         	case 2:
         		show=a[i];
         		break;
         	case 4:
            	show=b[i];
            	break;
          	case 8:
            	show=c[i];
            	break;  
         	case 16:
            	show=d[i];
            	break;
         	
               
         	default:
         		show=e[i];
         		break;
          }
          if(i<7)
        	 i++;
           else 
        	 i=0;
         }
       
     
     else num++;
      
     * T1CNT=0x0000;            //计数器清零
     * IFR=0xFFFF;              //清除所有中断标志,"写1清0"    
     * EVAIFRA=0xFFFF;          //清EVA中断标志
     asm(" clrc INTM");         //开总中断
}
      
void nothing()
{
     asm(" clrc INTM");
}

void main()
{
     sysini();
     timer1ini();
     for(;;)port8001=show;
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -