📄 zhjc.c
字号:
}
/* 得到键盘扫描码 */
uchar GetKey(bit isDispLed)
{
uchar pos,i,k;
i = 8;
pos = 0x80; /*扫描列*/
do
{
*OUTBIT = ~pos;
pos>>=1;
k=~(*IN_KEY) & 0xf;
} while ((--i!=0)&&(k==0));
if(k!=0) /* 键盘扫描码 = 列 * 4 + 行 */
{
i*=4;
if(k&2) i+=1;
else if(k&4) i+=2;
else if(k&8) i+=3;
*OUTBIT = 0;
while(TestKey()) /*等键释放*/
if(isDispLed)
DispLed();
return(i); /*返回扫描码*/
}
else return(0xff); /*键值超出范围*/
}
/* 显示运行状态 */
void DispRunStatus()
{
LCD_DispLat(0, 0); /*显示点阵*/
LCD_DispStr(
" "
" 按任意键退出 "
" 正在运行…… "
" "
);
}
/* 显示菜单 */
void DispMenu(uchar pages)
{
LCD_DispLat(0, 0); /*显示点阵*/
switch(pages)
{
case 0: LCD_DispStr(DispMsg0); break;
case 1: LCD_DispStr(DispMsg1); break;
case 2: LCD_DispStr(DispMsg2); break;
case 3: LCD_DispStr(DispMsg3); break;
}
LCD_DispCon(0xff,0xff,0x80,0x80,8,16);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
}
/* 循环延时 */
void myDelay(uint myLoop, uint myDelayTimes)
{
uint i;
for(i=0;i<myLoop;i++)
{
if(TestKey()) break;
Delay(myDelayTimes);
}
}
/*录音程序,20秒*/
void RecSound()
{
uchar count;
for(count =0;count<20;count++)
{
*RecCs = RecTab[count];
RecPlayDelay(2000); /*延时20秒*/
}
*RecCs = 0xff;
}
/*放音程序 */
void *PlaySound ()
{
uchar count = 0;
*RecCs = 0xff;
RecPlayDelay(2);
*RecCs = PlayTab [count];
RecPlayDelay(50);
*RecCs = 0x80;
RecPlayDelay (50);
}
/* 主函数 */
void main()
{
uchar keyval;
uchar ad, da, pages = 0;
uchar a, b, uv;
uchar i;
bit fl;
LCD_Init(); /*LCD初始化*/
LCD_DispLat(0, 0); /*显示点阵*/
LCD_DispStr(
"Dais Detect V1.0" /*line1*/
"达爱思软件工作室" /*line3*/
"实验装置综合检测" /*line2*/
"程序设计:高敏杰" /*line4*/
);
LCD_DispCon(0xff,0xff,0x80,0x80,8,16);
Delay(3000);
LCD_ClrRam();
LCD_DispStr(DispMsg0);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
while(1)
{
if(TestKey())
{
keyval = GetKey(NoDisp);
if(keyval>=0 && keyval<=31)
{
switch(keyval)
{
case kbB1: /*按F1键*/
if(pages==1)
{
LCD_ClrRam();
LCD_DispStr(DispMsg0);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
pages = 0;
}
else if(pages==2)
{
LCD_ClrRam();
LCD_DispStr(DispMsg1);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
pages = 1;
}
else if(pages==3)
{
LCD_ClrRam();
LCD_DispStr(DispMsg2);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
pages = 2;
}
break;
case kbB0: /*按F2键*/
if(pages==0)
{
pages = 1;
LCD_ClrRam();
LCD_DispStr(DispMsg1);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
}
else if(pages==1)
{
pages = 2;
LCD_ClrRam();
LCD_DispStr(DispMsg2);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
}
else if(pages==2)
{
pages = 3;
LCD_ClrRam();
LCD_DispStr(DispMsg3);
LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
}
break;
case kbA0: /*按0键 - A/D*/
case kbA4: /*按4键 - 压力*/
DispRunStatus();
LedBuf[0] = 0xc0;
LedBuf[1] = 0x80;
LedBuf[2] = 0xc0;
LedBuf[3] = 0x90;
LedBuf[4] = 0xff;
LedBuf[5] = 0xff;
while(!TestKey())
{
switch(keyval)
{
case kbA0:
*(CS0809)=02;
/**(CS0809+2)=02;*/
ad=*(CS0809+2);
break;
case kbA4:
*CS0809 = 1;
/**(CS0809+1)=1*/;
ad=*(CS0809+1);
break;
}
LedBuf[6] = LedMap[ad>>4];
LedBuf[7] = LedMap[ad&0xf];
DispLed();
}
DispMenu(pages);
break;
case kbA1: /*按1键 - D/A输出波形*/
case kbA6: /*按6键 - 直流电机*/
*CS0832 = DA_2V5;
LCD_DispLat(0, 0); /*显示点阵*/
LCD_DispStr(
" 调节基准电压 "
"D/A AOUT输出2.5V"
"调节W2电位器,使"
" 按任意键继续 "
);
while(!TestKey()); /*任意键继续*/
DispRunStatus();
da = DA_0V;
while(!TestKey()) /*任意键退出*/
{
*CS0832 = DA_0V; myDelay(5,100);
*CS0832 = DA_2V5; myDelay(10,100);
*CS0832 = DA_5V; myDelay(5,100);
*CS0832 = DA_2V5; myDelay(10,100);
}
*CS0832 = DA_2V5;
DispMenu(pages);
break;
case kbA2: /*按2键 - I/O*/
DispRunStatus();
while(!TestKey()) *CS_IO = *CS_IO;
DispMenu(pages);
break;
case kbA3: /*按3键 - LedKey*/
LCD_DispLat(0, 0); /*显示点阵*/
LCD_DispStr(
"键盘显示综合实验"
"注意:连续按4次"
" 正在运行…… "
"相同键退出实验!"
);
LedBuf[0] = 0xa1;
LedBuf[1] = 0x88;
LedBuf[2] = 0xf9;
LedBuf[3] = 0x92;
LedBuf[4] = 0xbf;
LedBuf[5] = 0xbf;
LedBuf[6] = 0xff;
LedBuf[7] = 0xff;
i = 0; uv = 0xff;
while(i<3)
{
if(TestKey())
{
keyval = GetKey(NeedDisp);
if(uv == keyval) i++;
else i = 0;
uv = keyval;
LedBuf[6] = LedMap[KeyTab[keyval]>>4];
LedBuf[7] = LedMap[KeyTab[keyval]&0xf];
}
DispLed();
}
DispMenu(pages);
break;
case kbA5: /*按5键 - 步进电机*/
DispRunStatus();
while(!TestKey())
{
for(i=0;i<15;i++)
{
*cs_374 = 0x30; myDelay(5,10);
*cs_374 = 0x60; myDelay(5,10);
*cs_374 = 0xc0; myDelay(5,10);
*cs_374 = 0x90; myDelay(5,10);
}
for(i=0;i<15;i++)
{
*cs_374 = 0x90; myDelay(5,10);
*cs_374 = 0xc0; myDelay(5,10);
*cs_374 = 0x60; myDelay(5,10);
*cs_374 = 0x30; myDelay(5,10);
}
}
DispMenu(pages);
break;
case kbA7: /*按7键 - 温控*/
DispRunStatus();
LedBuf[0] = 0xbf;
LedBuf[1] = 0xbf;
for(i=2;i<8;i++) LedBuf[i] = 0xff;
while(1)
{
if(TestKey())
{
keyval = GetKey(NeedDisp);
if(KeyTab[keyval]>0xf) break; /*是功能键退出*/
if(!fl)
{
a = KeyTab[keyval];
if(a<0x10) LedBuf[0] = LedMap[a];
fl = 1;
}
else
{
b = KeyTab[keyval];
if(a<0x10) LedBuf[1] = LedMap[b];
fl = 0;
}
}
uv = (a<<4) + (b&0xf);
*CS0809 = 0;
Delay(5);
ad = *(CS0809);
LedBuf[4] = LedMap[ad>>4];
LedBuf[5] = LedMap[ad&0xf];
DispLed();
if(ad>=uv) /**CS_IO = 0;*/
*cs_374 = 0;
else /**CS_IO = 0xf;*/
*cs_374 = 0xf;
}
DispMenu(pages);
break;
case kbA8: /*按8键 - 8253*/
DispRunStatus();
*CS8253 = 0x36;
*CS8253CNT0 = 0x00;
*CS8253CNT0 = 0x10;
while(!TestKey());
DispMenu(pages);
break;
case kbA9: /*按9键 - 16x16*/
DispRunStatus();
while(1)
{ /*达爱思产品,技术的典范,品质的保证!*/
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_DA);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_AI);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_SI);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_CHAN);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_PIN);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_COMMA);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_JI);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_SHU);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_DE);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_DIAN);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_FAN);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_COMMA);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_PIN);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_ZHI);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_DE);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_BAO);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_ZHENG);
if(TestKey()) if(GetKey(NoDisp)<32) break;
for(i=0;i<20;i++) Disp16Led(FontData_EXCMARK);
}
*HROW = *LROW = *HLINE = *LLINE = 0;
DispMenu(pages);
break;
case kbAA: /*按A键 - 串并*/
DispRunStatus();
SCON = 0x00;
i = 0;
while(!TestKey())
{
SBUF = ~S2PTab[i];
Delay(600);
i = (i==9)? 0:i+1;
}
SBUF = 0x00;
DispMenu(pages);
break;
case kbAB: /*按B键 - 音频*/
DispRunStatus();
while(!TestKey())
{
for(i=0;i<100;i++)
{
Speaker = !Speaker;
Delay(1);
}
Delay(100);
}
DispMenu(pages);
break;
case kbAC: /*按C键,录音实验*/
DispRunStatus();
RecSound();
DispMenu(pages);
break;
case kbAD: /*按D键,放音实验*/
DispRunStatus();
PlaySound();
DispMenu(pages);
break;
case kbAE: /*KBAE:IC卡实验*/
DispRunStatus();
IC_Main();
DispMenu(pages);
break;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -