?? d51_new.c.bak
字號:
/*------------------------------------------------------------------------------
D51_new.C
Copyright 1995-1999 Keil Software, Inc.
------------------------------------------------------------------------------*/
//#include <AT89S8252.H> /* define AT89C51 registers */
//#include <AT89X51.H> /* define AT89C51 registers */
#include <w77e58.H> /* define w77e58 registers */
#include "ABSACC.H"
#include "D51_new.h"
void keyboard_int() interrupt IE0_VECTOR{ /* Keyboard Interrup*/
uchar s,key;
s=STATUS8279;
if(s & 0x0f){
CTRL8279=0x40;
key=DATA8279;
s=((key & 0x18)>>1) | (key & 0x03);
keyChar=KeyTab[s];
keyNum=1;
}
}
void timer0_int() interrupt TF0_VECTOR {
EA=0;
THG0++;
LED_status=1;
EA=1;
}
/* Delay x ms MAX 255ms for 11.0592MHz 8051CPU */
void delay(uchar ms){
uchar i,j,k;
for(i=0;i<ms;i++){
for(j=0;j<4;j++){
for(k=0;k<115;k++){}
}
}
}
void timer1_int() interrupt TF1_VECTOR {
EA=0;
THG=THG0;
THGL=TH0*256+TL0;
THG0=0;
TH0=0;
TL0=0;
TH1=-NumberC/256;
TL1=-NumberC%256;
TSET=1;
EA=1;
void clearDispBuf(void) {
int i;
for(i=0;i<DISP_BUF_SIZE;i++){
DispBuf[i]=LedTab[22];
}
}
void Display(void)
{
int i;
for(i=0;i<8;i++){
CTRL8279=0x90+i;
DATA8279=DispBuf[i];
}
}
void DispHELLO(void) {
int i;
for(i=0;i<DISP_BUF_SIZE;i++){
DispBuf[i]=LedTab[HELLO[i]];
}
Display();
}
void loadDispBuf(uchar *p) {
int i;
for(i=0;i<DISP_BUF_SIZE;i++){
DispBuf[i]=LedTab[*(p+i)];
}
}
void DisplayChar(char c)
{
DATA8279=c;
}
void DisplayLED(void)
{
unsigned i;
i=LED_DATA;
i<<=8;
i|=LED_DATA;
i>>=7;
LED_DATA=(unsigned char)(i&0xff);
}
void encode(unsigned int adr) {
int i;
unsigned int adr1;
uchar c;
adr1=adr;
for(i=0;i<8;i++){
if(adr==0x8000){
DispBuf[i]=LedTab[OKLedChar[i]];
}
else{
c=adr1&0x0f;
adr1>>=4;
if(i>3)c=ERRT[7-i];
DispBuf[7-i]=LedTab[c];
}
}
}
void encode1(void) {//12345678
unsigned char i;
for(i=0;i<8;i++){
DispBuf[i]=LedTab[i+1];
}
}
void encode2(void) {//87654321
unsigned char i;
for(i=0;i<8;i++){
DispBuf[i]=LedTab[8-i];
}
}
void encode3(void) {//F3
clearDispBuf();
DispBuf[0]=LedTab[15];
DispBuf[1]=LedTab[3];
}
void encode4(void) {//F4
clearDispBuf();
DispBuf[0]=LedTab[15];
DispBuf[1]=LedTab[4];
}
void encode5(unsigned char c) {
unsigned char i;
for(i=0;i<7;i++){
DispBuf[i]=DispBuf[i+1];
}
DispBuf[7]=LedTab[c-0x30];
}
void encode6(unsigned long freq) {
unsigned char i,c[8],j;
unsigned long f;
f=freq>>10;//f=freq/1024
for(i=0;i<8;i++){
c[i]=0;
}
while(f>=1000000){
f-=1000000;
c[1]++;
}
while(f>=100000){
f-=100000;
c[2]++;
}
while(f>=10000){
f-=10000;
c[3]++;
}
while(f>=1000){
f-=1000;
c[4]++;
}
while(f>=100){
f-=100;
c[5]++;
}
while(f>=10){
f-=10;
c[6]++;
}
c[7]+=f;
j=0;
for(i=0;i<8;i++){
if((c[i]==0)&&(j==0))
DispBuf[i]=LedTab[22];
else{
j=1;
DispBuf[i]=LedTab[c[i]];
}
}
}
void clearDisplay(void) {
CTRL8279=0xd1; /* clear RAM */
while (STATUS8279 & 0x80) /* wait till RAM is clear */
{
}
}
void init8279(void) {
clearDisplay();
CTRL8279=0x20 | 20; /* 11.0592MHz/6/20=92.16kHz 8279 clock */
CTRL8279=(0x10<<3) | 0 ; /* 8x8字符顯示, 右入; 編碼掃描鍵盤,雙鍵鎖定 */
// InitDisplay();
keyNum=0;
}
//;******** RAM自檢子程序*************
unsigned int chkram(void) { /* RAM Chack */
unsigned int adr;
uchar c,r;
for(adr=0;adr<0x8000;adr++){
c=0xaa;
XBYTE[adr]=c;
r=XBYTE[adr];
if(r!=c)return adr;
c=0x55;
XBYTE[adr]=c;
r=XBYTE[adr];
if(r!=c)return adr;
}
return adr;
}
void delay_dds(void)
{
uchar i,j;
for(i=0;i<1;i++){
j=i;
}
}
void init_dds(void)
{
uchar i;
WCLK_pin=0;
FQ_UD_pin=0;
delay_dds();
delay_dds();
WCLK_pin=1;
delay_dds();
WCLK_pin=0;
delay_dds();
FQ_UD_pin=1;
delay_dds();
FQ_UD_pin=0;
delay_dds();
for(i=0;i<8;i++){
DATA_pin=0;
delay_dds();
WCLK_pin=1;
delay_dds();
WCLK_pin=0;
}
delay_dds();
FQ_UD_pin=1;
delay_dds();
FQ_UD_pin=0;
}
void update_freq(unsigned long f,uchar c)
{
uchar i,cs;
unsigned long freq_temp;
freq_temp=f;
cs=c;
for(i=0;i<32;i++){
if(freq_temp & 1)
DATA_pin=1;
else
DATA_pin=0;
delay_dds();
WCLK_pin=1;
delay_dds();
WCLK_pin=0;
freq_temp>>=1;
}
for(i=0;i<8;i++){
if(cs & 1)
DATA_pin=1;
else
DATA_pin=0;
delay_dds();
WCLK_pin=1;
delay_dds();
WCLK_pin=0;
cs>>=1;
}
delay_dds();
FQ_UD_pin=1;
delay_dds();
FQ_UD_pin=0;
}
void main (void){ /* main program */
unsigned int adr;
unsigned long freq,dfreq,temp_f;
uchar ctrl1;
// int temp,i;
uchar status;
// char out_char[5];
EA=0; /* 0=Disable all interrupts */
P1=0xff;
LED_DATA=0xff; //off all LEDs
freq=1000<<10;
dfreq=1000<<10;
temp_f=0;
ctrl1=0x00;
DATA_pin=0;
WCLK_pin=0;
FQ_UD_pin=0;
delay(10);
init8279();
// clearDispBuf();
DispHELLO();
adr=chkram();
encode(adr);
Display();
// adr=chkram();
status=0;
// NumberC=defaultN;
EA=1;
EX0=1;
EX1=0;
ES=0;
ET0=0;
ET1=0;
TMOD=C_T1 | M0_1 | M0_0; //0x51; /* timer1 16位計數器 timer0 16位定時器 */
TH1=-NumberC/256;
TL1=-NumberC%256; /* timer1 計數 NumberC 中斷 timer0定時 */
TH0=0;
TL0=0;
THG0=0;
TSET=0;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
init_dds();
delay(10);
LED_DATA=0xfc; //on 2 LEDs
/* for(;;){ //test delay();
delay(10);
P1_0=0;
delay(10);
P1_0=1;
}*/
update_freq(freq,ctrl1);
status=0;
// while (1) { /* repeat forever */
// }
while (1) { /* repeat forever */
if(LED_status==1){
LED_status=0;
DisplayLED();
}
if(keyNum==1){
switch(keyChar)
{
case 'A' : /* F1 */
freq=temp_f<<10;
update_freq(freq,ctrl1);
temp_f=0;
clearDispBuf();
encode6(freq);
Display();
status=0;
break;
case 'B' : /* F2 */
dfreq=temp_f<<10;
temp_f=0;
clearDispBuf();
encode6(dfreq);
Display();
status=0;
break;
case 'C' : /* F3 */
freq+=dfreq;
update_freq(freq,ctrl1);
clearDispBuf();
encode6(freq);
Display(); /* */
status=0;
break;
case 'D' : /* F4 */
freq-=dfreq;
update_freq(freq,ctrl1);
clearDispBuf();
encode6(freq);
Display(); /* */
status=1;
break;
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case '0' :
/* if((key_num==0) && ((status & 0x80)!=0)){
clearDispBuf();
Display();
key_num=0;
}
if((status & 0x80)!=0){
if(key_num<5){
DisplayChar(LedTab[keyChar-0x30]);
out_char[key_num]=keyChar;
key_num++;
}
}*/
temp_f=10*temp_f;
temp_f+=keyChar&0x0f;
encode5(keyChar);
Display(); /* */
status=0;
break;
case '*' :
temp_f=0;
clearDispBuf();
Display();
break;
case '#' :
encode6(freq);
Display(); /* */
status=0;
/* if(status==1){
adr=chkram();
encode(adr);
Display();
status=0;
}
else{
encode5(keyChar);
DispBuf[7]=LedTab[keyChar-'#'+16]; //#(0x23) --> 16 P *(0x2a) --> 23 -
Display();
} */
break;
default :
;
}
keyNum=0;
}
} /* loop forever */
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -