📄 用dsp实现霓虹灯.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 + -