当前位置:首页 > 正弦信号发生器ad9850实际键盘(经典)
P1=(P1<<1)|0x1; }
while((P1&0x0f)!=0x0f) //等待释放 {
P1=0x0f; }
beep=1; }
return keycode; }
/********* 显示数字 *************/ void xianshu(unsigned long a) { unsigned long c,p=0; c=a/1000000000; if(c!=0)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a00000000)/100000000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a0000000)/10000000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a000000)/1000000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a00000)/100000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1;
}
c=(a0000)/10000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a000)/1000; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; }
c=(a00)/100; if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); p=1; } c=(a0)/10;
if(c!=0 || p==1)
{lcd1602_wrdata(c+0x30); }
c=a+0x30; lcd1602_wrdata(c); }
/******* 菜单显示子程序 ************/ void xianshi(uchar j)
{ uchar code str[][9]={{\\F \dF\XW\\\\\ uchar i;
unsigned char offset=0x80; lcd1602_clear();
lcd1602_wrcmd(offset+0x00);
lcd1602_wrcmd(offset+0x00); lcd1602_wrdata('-'); lcd1602_wrdata('>');
for(i=0;i<8;i++) lcd1602_wrdata(str[j+0][i]);
lcd1602_wrcmd(offset+0x40); lcd1602_wrdata(' ');
\ lcd1602_wrdata(' ');
for(i=0;i<8;i++) lcd1602_wrdata(str[j+1][i]); }
/*************** AD9850驱动程序 ************/ ad9850(float freq, float dfreq,ulong d4) {
float fw; uchar i,j,temp; uchar s; uchar d[5];
fw=freq*34.359738368*3; //d[4]中存放控制字最高位,即相位控制字 //Freq=MCLK*FW/2^32 d[4]=(unsigned long)(d4/11.25)*8; d[0]=(unsigned long)fw; d[1]=(unsigned long)fw>>8; d[2]=(unsigned long)fw>>16; d[3]=(unsigned long)fw>>24;
load=0; sclk=0; sclk=1; sclk=0; load=1; load=0;
for(i=0;i<5;i++) {
temp=d[i]; for(j=0;j<8;j++) {
sclk=0;
if(temp&1) sdata=1; else sdata=0; sclk=1;
temp=temp>>1; } } load=1; load=0;
lcd1602_clear(); lcd1602_wrdata(' ');
lcd1602_wrdata(' '); lcd1602_wrdata(' '); lcd1602_wrdata(' '); lcd1602_wrdata(' ');
if ((unsigned long)freq00==0 ) {
s='K'; freq=freq/1000;
if ( (unsigned long) freq00==0) {s='M';freq=freq/1000 ; } }
else{ s=' ';} xianshu(freq); lcd1602_wrdata(s); lcd1602_wrdata('H'); lcd1602_wrdata('Z');
lcd1602_wrcmd(0x80+0x40); //换行
if ((unsigned long)dfreq00==0 ) {
s='K'; dfreq=dfreq/1000;
if ( (unsigned long) dfreq00==0) {s='M';dfreq=dfreq/1000 ; } }
else{ s=' ';}
lcd1602_wrdata(0x7e); xianshu(dfreq); lcd1602_wrdata(s); lcd1602_wrdata('H'); lcd1602_wrdata('Z');
lcd1602_wrcmd(0x80+0x4b); //定坐标 控制显示位子 lcd1602_wrdata(0xf2); lcd1602_wrdata(':'); xianshu(d4);
}
/********************** 按键显示数程序 *************************/ ulong dushu()
共分享92篇相关文档