?? ddfstest1.c
字號:
/*mcu向cpld寫一個字節,再讀出來
//*7218在硬件譯碼的時候,低四位數據進行譯碼,最高位控制小數點,其余三位無效*/
// distab保存要顯示的8位數據(每一位為一個字節)
// ledtab為7218軟件譯碼字型表
#include<AT89X51.h>
//#include<intrins.h>
#include<absacc.h>
#define DisCmd XBYTE [0xC100] //7218控制字地址
#define DisData XBYTE [0xC000] //7218數據口地址
#define LedMode P1_5
#define scode 0xb0 //7218軟件譯碼方式命令字
#define bcode 0x90 //B碼譯碼方式命令字
#define hexcode 0xd0 //軟件譯碼方式命令字
#define unchar unsigned char
bit enter=0;
char keynum; //按鍵號
char ledcursor=7; //保存光標當前位置
char distab[8]={0x12,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,0xca,0xf6 };
//熄滅 H L P - r q
unsigned int phase=0;
unsigned int fre=0;
//***************************************************************************************
//void KeyprgF1(void){}
// void KeyprgF2(void ){}
//void KeyprgClear(void){}
//void KeyprgEnter(void){}
//***************************************************************************************
void display()
{
unchar i;
LedMode=1;
DisCmd=scode; //采用軟件譯碼
LedMode=0;
for(i=0;i<8;i++) //將distab中的數據送如7218
{
DisData=ledtab[distab[i]]; //查表轉化并將字型送入7218
}
}
//**************************************************************************************
void KeyprgF2() //在光標當前位置設置小數點
{
unchar i;
DisCmd=scode; //采用軟件譯碼
for(i=0;i<8;i++) //將distab中的數據送如7218
{
if(i=ledcursor)
temp[i]=ledtab[distab[i]]+0x80;
temp[i]=ledtab[distab[i]]; //查表轉化并將字型送入7218
DisData=temp[i];
}
}
//**************************************************************************************
void keyprg(unchar key) //鍵盤鍵值執行的程序
{
unchar i;
if((key<=9)&enter)
{
distab[ledcursor]=keynum; //鍵值送入distab最低位保存
if(ledcursor>0) //光標移位
ledcursor--;
else
ledcursor=7;
display(); //顯示鍵值
}
else
{
switch(key)
{
case 0x0D: //加
if(distab[ledcursor]<0x09)
distab[ledcursor]++;
else
distab[ledcursor]=0;
display(); //顯示鍵值
break;
case 0x0E: //減
if(distab[ledcursor]>0)
distab[ledcursor]--;
else
distab[ledcursor]=9;
display(); //顯示鍵值
break;
case 0x0A: //KeyprgF1();
for(i=0;i<8;i++) //將distab中的數據送如7218
{
distab[i]=0;
}
ledcursor=7;
display(); //顯示鍵值
break;
case 0x0B: //功能鍵F2
KeyprgF2();
break;
case 0x0C: //KeyprgBack();
if(ledcursor<7) //光標移位
ledcursor++;
else
ledcursor=0;
display(); //顯示鍵值
break;
case 0x0F: //KeyprgEnter();
enter=!enter;
display(); //顯示鍵值
break;
default:
break;
}
}
}
//**************************************************************************************
void intt0() interrupt 0
{
char xdata *cpld;
EX0=0; //關鍵盤中斷,禁止相應其他按鍵
keynum=P1; //從p1口讀入鍵盤值
keynum=keynum&0x0f; //取低四位;
// keyprg(keynum);
if(keynum==0x0f)
{
enter=!enter;
if(enter)
{
distab[7]=0x13;
distab[6]=0x11;
distab[5]=0x0a;
distab[4]=0x05;
distab[3]=0x0e;
distab[2]=0x10;
distab[1]=0x10;
}
else
{
distab[7]=0x0f;
distab[6]=0x15;
distab[5]=0x0e;
distab[4]=0x16;
distab[3]=0x10;
distab[2]=0x10;
distab[1]=0x10;
}
}
if(keynum==0x0d)
{
if(enter)
{
phase++;
cpld=0xA0ff;
*cpld=phase;
distab[0]=phase;
}
else
{
fre++;
cpld=0xA0fe;
*cpld=fre;
distab[0]=fre;
}
}
if(keynum==0x0e)
{
if(enter)
{
phase--;
cpld=0xA0ff;
*cpld=phase;
distab[0]=phase;
}
else
{
fre--;
cpld=0xA0fe;
*cpld=fre;
distab[0]=fre;
}
}
display();
EX0=1;
}
void main()
{
EX0=1;
EA=1;
display();
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -