📄 heart0.c.c
字号:
{ delay(50);//50ms扫一次键盘
keyscan();
putcom(0xcc);//显示键码
putchar(keycode/10+0x30);
putchar(keycode%10+0x30);
keyinit();
}
while(keycode<15);//按15号键退出
putcom(0x00);putcom(0x80);
putstr(str3,14);//over
delay(800);
}
/*---------------RAM检测程序------------*/
void ram_test(void)
{uint i,a=0x0000;uchar temp;
putcom(0x00);putcom(0x80);
putstr(str6,16);//begin
delay(800);
putcom(0x00);
putcom(0x80);
putstr(test,13);
delay(500);
for(i=0;i<0x8000;i++)
{XBYTE[a]=0x00;
temp=XBYTE[a];
if(temp==0x00);
else
{putcom(0xc1);
putchar(i/10000+0x30);
putchar(i%10000/1000+0x0030);
putchar(i%1000/100+0x0030);
putchar(i%100/10+0x0030);
putchar(i%10+0x30);
putchar(0x20);
putstr(error,6);
delay(100);
putcom(0xc0);
putcom(0x00);
}
a++;
}
delay(800);
putcom(0x00);putcom(0x80);
putstr(str7,14);//over
delay(800);
}
/*-------------时钟检测----------------*/
void clock_test(void)
{uchar time[7],i,j;
v_Set1302(t_init); //时钟初始化
putcom(0x00);putcom(0x80);
putstr(str8,15);
for(i=0;i<20;i++)
{
v_Get1302(time);
j=time[6];
putcom(0x00);
putcom(0xc0);
putchar(((j>>4)&0x0f)+0x30);//年
putchar((time[6]&0x0f)+0x30);
putchar('/');
j=time[4]; //月
putchar(((j>>4)&0x0f)+0x30);
putchar((time[4]&0x0f)+0x30);
putchar('/');
j=time[3]; //日
putchar(((j>>4)&0x0f)+0x30);
putchar((time[3]&0x0f)+0x30);
putcom(0x8c);
putchar(time[5]+0x30);//星期
putcom(0xc3);
j=time[2]; //时
putchar(((j>>4)&0x0f)+0x30);
putchar((time[2]&0x0f)+0x30);
putchar(':');
j=time[1]; //分
putchar(((j>>4)&0x0f)+0x30);
putchar((time[1]&0x0f)+0x30);
putchar(':');
j=time[0]; //秒
putchar(((j>>4)&0x0f)+0x30);
putchar((time[0]&0x0f)+0x30);
delay(250);
}
putcom(0x00);putcom(0x80);
putstr(str9,16);
delay(800);
}
/******************************键盘服务程序区***********************************/
void disp0(void) //system test
{putcom(0x01);putcom(0x80);
putchar(0x7e);
putstr(str12,11);
}
void disp1(void)//single 1
{putcom(0x01);putcom(0x80);
putchar(0x7e);
putstr(str13,8);
}
void disp2(void)//single 2
{putcom(0x01);putcom(0x80);
putchar(0x7e);
putstr(str14,8);
}
void disp3(void)//chop
{putcom(0x01);putcom(0x80);
putchar(0x7e);
putstr(str15,4);
}
void disp4(void)//回放
{putcom(0x01);putcom(0x80);
putchar(0x7e);
putstr(str16,6);
}
/*-------------检测程序------------*/
void testall(void)
{ lcd_test();//液晶检测(1602)
keyboard_test();//键盘检测
ram_test();//62256检测
clock_test();//时钟检测
}
/*------------显示键控程序-----------------------*/
void key_switch2(void)
{if((PC8255&0x0f)==0x0f);//无键按下
else
{delay(30);
if((PC8255&0x0f)==0x0f);
else
{keyscan();
delay(50);
switch(keycode)
{case 1:if(Ax<255){ Ax=Ax+1;XCON=Ax;} //x加
break;
case 5:if(Ax>2) { Ax=Ax-1;XCON=Ax;} //x减
break;
case 2:if(Ay<255){Ay=Ay+1;YCON=Ay;} //y加
break;
case 6:if(Ay>2) {Ay=Ay-1;YCON=Ay;} //y减
break;
default:
break;
}
}
}
}
/*--------数据转换以实现存储地址循环------------*/
uint dp(uint x,uint i)
{if((i+x-256)>0x4000)
return(i+x-256);
else
return(i+x+0x4000-256);
}
/*------------第一路信号存储输出---------------*/
void single1(void)
{uint i=0x4000,x;
putcom(0xc0);
putstr(str17,11);
do
{A0=0;
START=1;START=0;//启动转换
while(EOC==0);
OE=1;
XBYTE[i-0x4000]=P0; //存取数据
OE=0;
for(x=0;x<256;x++)//输出一屏 (256点)
{XOUT=x;
YOUT=XBYTE[dp(x,i)-0x4000];
}
i=(i++)%0x8000+0x4000;
key_switch2();
}
while(keycode!=3);// 是否返回
}
/*------------第二路信号存储输出---------------*/
void single2(void)
{uint i=0x4000,x;
putcom(0xc0);
putstr(str17,11);
do
{A0=1;
START=1;START=0;//启动转换
while(EOC==0);
OE=1;
XBYTE[i]=P0; //存取数据
OE=0;
for(x=0;x<256;x++)//输出一屏 (256点)
{XOUT=x;
YOUT=XBYTE[dp(x,i)];
}
i=(i++)%0x8000+0x4000;
key_switch2();
}
while(keycode!=3);// 是否返回
}
/*----------两路信号同时输出------------------*/
void chop(void)
{uint i=0x4000,x;
putcom(0xc0);
putstr(str17,11);
do
{A0=0;//采集第一路
START=1;START=0;//启动转换
while(EOC==0);
OE=1;
XBYTE[i-0x4000]=P0; //存取数据
OE=0;
A0=1;//采集第二路信号
START=1;START=0;//启动转换
while(EOC==0);
OE=1;
XBYTE[i]=P0; //存取数据
OE=0;
for(x=0;x<256;x++)//输出一屏 (256点)
{XOUT=x;
YOUT=(uchar)(XBYTE[dp(x,i)]/2);
YOUT=(uchar)(XBYTE[dp(x,i)-0x4000]/2+128);
}
i=(i++)%0x8000+0x4000;
key_switch2();
}
while(keycode!=3);// 是否返回
}
/*----------------回放----------------------*/
void review(void)
{uint i=0x4000,x;
putcom(0xc0);
putstr(str17,11);
do
{for(x=0;x<256;x++)//输出一屏 (256点)
{XOUT=x;
YOUT=(uchar)(XBYTE[dp(x,i)]/2);
YOUT=(uchar)(XBYTE[dp(x,i)-0x4000]/2+128);
}
i=(i++)%0x8000+0x4000;
key_switch2();
}
while(keycode!=3);// 是否返回
}
/*******************************按键控制区***********************************/
/*-------------键状态数组--------*/
KeyTabStruct code KeyTab[SIZE_MENU]=
{
{0,1,4,5,0,disp0},
{1,2,0,6,1,disp1},
{2,3,1,7,2,disp2},
{3,4,2,8,3,disp3},
{4,0,3,9,4,disp4},
{5,0,0,0,0,testall},
{6,1,1,1,1,single1},
{7,2,2,2,2,single2},
{8,3,3,3,3,chop},
{9,4,4,4,4,review},
};
/*----------键盘散转程序-------------------*/
void key_switch(void)
{delay(10);
switch(keycode)
{
case 0:
KeyFuncIndex=KeyTab[KeyFuncIndex].Keyupstate;
break;
case 4:
KeyFuncIndex=KeyTab[KeyFuncIndex].Keydnstate;
break;
case 7:
KeyFuncIndex=KeyTab[KeyFuncIndex].Keycrstate;
break;
case 3:
KeyFuncIndex=KeyTab[KeyFuncIndex].Keybkstate;
break;
default:
break;
}
keyinit();
KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperation;
}
/*************************主程序***************************/
main()
{ COM8255=0x81;
delay(800);
COM8255=0x81;
putcom(0x80);
putcom(0x01);
putir(ir,5);
putstr(str,8);
delay(800);
XCON=Ax;YCON=Ay; //送幅度控制字
keyinit(); //键盘初始化
disp0(); //进入菜单
while (1)
{ while((PC8255&0x0f)==0x0f);// 等待按键
delay(30);
while((PC8255&0x0f)==0x0f);// 去抖
keyscan();
delay(50);
key_switch();
(*KeyFuncPtr)();//执行当前按键的操作
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -