📄 ddfstest2.c
字号:
/*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
//distab保存要显示的8位数据(每一位为一个字节)
//ledtab为7218软件译码字型表
#include<AT89x51.h>
#include<absacc.h>
#include<intrins.h>
#define DisCmd XBYTE [0xC100] //7218控制字地址
#define DisData XBYTE [0xC000] //7218数据口地址
#define LedMode P1_5
#define PLD_Reset XBYE [0xA0FB] // 重置信号reset;复位值:0xff;
#define FreHigh XBYTE [0XA0FC] //频率信号高八位地址;
#define FreLow XBYTE [0XA0FD] //频率信号低八位地址;
#define PhaHigh XBYTE [0XA0FE] //相位信号高八位地址;
#define Phalow XBYTE [0XA0FF] //相位信号第八位地址;
#define scode 0xb0 //7218软件译码方式命令字
#define bcode 0x90 //B码译码方式命令字
#define hexcode 0xd0 //软件译码方式命令字
#define unchar unsigned char
#define unint unsigned int
bit flinkflag; //闪烁标志位
unchar keynum; //按键号
unchar enter=0;
bit Led_On;
char ledcursor=7; //保存光标当前位置
unint Freq; //输入频率
long Phase; //输入相位
unchar sw;
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
//char temp[8];
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
//0, 1, 2, 3, 4, 5, 6, 7
0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
//8 ,9 ,a ,b ,c ,d ,e ,f
0x80,0xbe,0x8b,0xee,0x84 };
//熄灭 H L P -
//***************************************************************************************
void delay200ms()
{
int i=10000,j=1000;
for(;i>0;i--)
for(;j>0;j--);
}
//***************************************************************************************
void display(unchar dot)
{
unchar i;
LedMode=1;
DisCmd=scode; //采用软件译码
LedMode=0;
if(Led_On)
{
for(i=0;i<8;i++) //将distab中的数据送如7218
{
if((i==dot)&(dot!=0))
DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
else
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
}
}
//***************************************************************************************
void flink() //flag为1闪烁,flag为0,不闪烁;
{
unchar i;
while(flinkflag) //光标位置闪烁
{
LedMode=1;
DisCmd=scode; //采用软件译码
LedMode=0;
for(i=0;i<8;i++) //将distab中的数据送如7218
{
if(i==ledcursor)
DisData=0x80; //查表转化并将字型送入7218
else
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
delay200ms();
LedMode=1;
DisCmd=scode;
display(0);
delay200ms();
}
}
//***************************************************************************************
void KeyprgF1(void) //输入频率
{
sw=1;
flinkflag=1;
ledcursor=4;
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x00;
distab[4]=0x00;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x0f;
display(0);
}
void KeyprgF2(void ) //输入相位
{
sw=0;
ledcursor=2;
flinkflag=1;
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x10;
distab[4]=0x10;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x13;
display(0);
}
//void KeyprgClear(void){}
void KeyprgEnter(void)
{
unint temp;
//enter=!enter;
flinkflag=0;
if(sw)
{
Freq=distab[4]*1000+distab[3]*100+distab[2]*10+distab[1];
temp=_iror_(Freq,8);
FreHigh=temp;
temp=Freq%256;
FreLow=temp;
}
else
{
Phase=distab[2]*100+distab[1]*10+distab[0];
Phase=(Phase*512)/360;
temp=(unint)_lror_(Phase,1);
PhaHigh=temp;
temp=(unint)(Phase&0x01);
temp=_irol_(Phase,7);
Phalow=temp;
}
display(0); //显示键值
}
//**************************************************************************************
void keyprg(unchar key) //键盘键值执行的程序
{
// unchar i;
if(key<=9)
{
distab[ledcursor]=keynum; //键值送入distab最低位保存
if(ledcursor>0) //光标移位
ledcursor--;
else
ledcursor=7;
display(0); //显示键值
}
else
{
switch(key)
{
case 0x0A:
KeyprgF1();
break;
case 0x0B: //功能键F2
KeyprgF2();
break;
case 0x0C: //KeyprgBack();
if(ledcursor<7) //光标移位
ledcursor++;
else
ledcursor=0;
display(0); //显示键值
break;
case 0x0D: //加
if(distab[ledcursor]<0x09)
distab[ledcursor]++;
else
distab[ledcursor]=0;
display(0); //显示键值
break;
case 0x0E: //减
if(distab[ledcursor]>0)
distab[ledcursor]--;
else
distab[ledcursor]=9;
display(00); //显示键值
break;
case 0x0F:
KeyprgEnter();
break;
default:
break;
}
}
}
//**************************************************************************************
void intt0() interrupt 0
{
EX0=0; //关键盘中断,禁止相应其他按键
keynum=P1; //从p1口读入键盘值
keynum=keynum&0x0f; //取低四位;
keyprg(keynum);
//if(enter) //不是enter键,屏蔽中断
EX0=1;
}
//**************************************************************************************
void main()
{
unchar j=0;
EX0=1;
//ET0=1;
EA=1;
//clock_initial() ;
Led_On=1;
display(0);
while(1)
{
// if(flinkflag==1)
flink();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -