📄 signal_show.c
字号:
x=x+8;
show_num(x,y,CC00S);// s
x=x+8;
show_num(x,y,CC0ZZ);// /
x=x+8;
showchinese(x,y,CB8F1);//格
// showchinese(10,140,CC6B5);
// showchinese(27,140,CC6D7);
}
/***************************************************************
*名称:initall(void)
*描述:初始化液晶屏
*参数:
*返回:
****************************************************************/
void initall(void)
{
lcd_cs=0;
turnoff();
init();
initram();
turnon();
lcd_cs=1;
DrawFrame();
// DrawGrid();
}
/***************************************************************
*名称:uchar adc0804(void)
*描述:AD0804采样一次
*参数:
*返回:采样值
****************************************************************/
/*uchar adc0804(void)
{
uchar idata ad_data ;
P0=0xff;
Adc_cs = 0 ;
// lcd_rd = 1 ;
lcd_wr = 0 ;
lcd_wr = 1 ;
while(Adc_busy) ;
//lcd_rd = 0 ;
lcd_a0=0;
ad_data = P0 ;
//lcd_rd = 1 ;
lcd_a0=1;
Adc_cs = 1 ;
return ad_data ;
}*/
void clear(unsigned int x,unsigned int y,unsigned char ll)
{
unsigned int idata address;
uchar idata addh,addl;
uchar idata m;
// x=24;y=0;
address=0x01f9+x/8+y*AP;
addh=address>>8;//addh=address/256;
addl=(uchar)address;//addl=address%256;
lcd_cs=0;
lcd_a0=1;
outcode(0x46);
lcd_a0=0;
outdata(addl);
outdata(addh);
lcd_a0=1;
outcode(0x4f);
outcode(0x42);
lcd_a0=0;
for(m=0;m<ll;m++)
{
EA=0;
lcd_a0=0;
P0=0xff;
lcd_rd=0;
// aaa=busy;
while(busy==1); //aaa=busy
lcd_rd=1;
lcd_a0=0;
EA=1;
//for(m=0;m<2;m++)
outdata(0);
}
lcd_cs=1;
}
void clear_1(unsigned int x,unsigned int y)
{
unsigned int idata address;
uchar idata addh,addl;
uchar idata n;
// uchar temp;
// bit aaa;
// x=24;y=0;
address=0x01f9+x/8+y*AP;
addh=address>>8;//addh=address/256;
addl=(uchar)address;//addl=address%256;
lcd_cs=0;
lcd_a0=1;
outcode(0x46);
lcd_a0=0;
outdata(addl);
outdata(addh);
lcd_a0=1;
outcode(0x4f);
outcode(0x42);
lcd_a0=0;
for(n=0;n<200;n++)
{
/* EA=0;
lcd_a0=0;
P0=0xff;
lcd_rd=0;
// aaa=busy;
while(busy==1); //aaa=busy
lcd_rd=1;
lcd_a0=0;
EA=1;*/
//for(m=0;m<2;m++)
outdata(0);
}
lcd_cs=1;
}
/***************************************************************
*名称:Adc_work(void)
*描述:AD0804采样
*参数:
*返回:采样值数组
****************************************************************/
/*void Adc_work(void)
{
unsigned int k=0 ;
unsigned char temp_data1,temp_data2;
unsigned int x,y;
clear(24,0,200);
x=32;y=35;
clear(x,y,21);
// while(!Adc_en) ;
P0=0xff;
temp_data1 = adc0804() ;
WriteD(25,(temp_data1>>1)+35);
y=y+21;
clear(x,y,21);
// while(!Adc_en) ;
for(k=1;k<Sam_N;k++)
{
// while(!Adc_en) ;
P0=0xff;
temp_data2 = adc0804() ;
WriteD(k+25,(temp_data2>>1)+35);
if(k%8==0)
{
x=x+8;
y=0;
}
else y=y+21;
test=1;
clear(x,y,21);
test=0;
// while(!Adc_en) ;
temp_data1=temp_data2;
}
}*/
/***************************************************************
*名称:showsine (void)
*描述:显示采样的结果,采64个点但显示256点
*参数:xr_temp[]显示数组,N_temp数组元素个数,
start_add图形开始的x地址,last上次显示最后一个元素
*返回:
****************************************************************/
/*void showsine (uchar xr_temp[],uchar N_temp,uchar start_add,uchar last)
{
uchar i ;
WriteD(start_add,xr_temp[1]>>1);
vector(start_add-1,last>>1,xr_temp[1]>>1);
for(i=2;i<N_temp;i++)
{
WriteD(i-1+start_add,xr_temp[i]>>1);
vector(i-2+start_add,xr_temp[i-1]>>1,xr_temp[i]>>1);
}
}*/
void led_display(uchar i)
{
uchar j,mask;
mask=0x01;
for(j=0;j<8;j++){
LED_CLK=0;
LED_DAT=( (LED_FONT[i]) & mask);
mask<<=1;
LED_CLK=1; //上升沿移位
}
}
void refresh_led()
{
led_display(10);
led_display(value[0]);
led_display(value[1]);
led_display(value[2]);
led_display(value[3]);
led_display(value[4]);
}
void init_interrupt()
{
EA=0;
EX1=1;
PX1=1;
IE1=0;
IT1=1; //外部中断1为跳变触发方式
PX0=1;
EX0=1;
IE0=0;
IT0=1; //外部中断0为跳变触发方式
}
void show_f(unsigned int freq)
{
unsigned int idata time,temp;
uchar x,y;
time = 25000/freq;
x=10;y=162;
temp=time/1000;
show_num(x,y,CC000+(temp<<4));
x=x+8;
temp=(time%1000)/100;
show_num(x,y,CC000+(temp<<4));
x=x+8;
temp=(time%100)/10;
show_num(x,y,CC000+(temp<<4));
x=x+8;
temp=time%10;
show_num(x,y,CC000+(temp<<4));
}
void main()
{
unsigned int idata k=0 ;
unsigned int idata x,y;
unsigned char idata value_index;
unsigned int idata freq,freq_2;
bit flag_grid=0;
lcd_a0=1;
lcd_wr = 1 ;
initall() ;
showchin() ;
refresh_led();
show_f(5000);
init_interrupt();
TMOD = 0x01;// 定时器相关设置
ET0 = 1;
TR0 = 1;
k=1;
num = 0;
value_index=0;
Adc_cs = 0 ;
lcd_wr = 0 ;
lcd_wr = 1 ;
Adc_cs = 1 ;
EX1=1;
TH0 = dH;
TL0 = dL;
ET0=1;
EA = 1;
clear_1(8,0);
clear_1(16,0);
clear_1(24,0);
clear_1(32,0);
x=32;y=25;
clear(x,y,21);
while(1)
{
if(key_pressed==ON)
{
EX0=0;
switch(key_no)
{
case key0:
case key1:
case key2:
case key3:
case key4:
case key5:
case key6:
case key7:
case key8:
case key9:
if(value_index<5)
{
value[value_index]=key_no;
value_index++;
}
refresh_led();
break;
case key_enter:
freq=value[0]*10000+value[1]*1000+value[2]*100+value[3]*10+value[4];
if(freq>7000)
{
freq=7000;
freq_2=0xff71;
value[0]=0;
value[1]=7;
value[2]=0;
value[3]=0;
value[4]=0;
}
else if(freq<50)
{
freq=50;
freq_2=0xb1df;
value[0]=0;
value[1]=0;
value[2]=0;
value[3]=5;
value[4]=0;
}
else freq_2=0xffff-(1000000/freq);
refresh_led();
dH=freq_2>>8;
dL=(uchar)freq_2;
show_f(freq);
value_index=0;
break;
case key_mod:
flag_grid=!flag_grid;
if(flag_grid)DrawGrid();
else{
initram_2();
DrawFrame();
}
default :break;
}
key_pressed=OFF;
EX0=1;
}
if(k<=num)
{
lcd_cs=0;
turnon();
WriteD(k+24,(x_data[k]>>1)+40);
if(k%8==0)
{
x=x+8;
y=25;
}
else y=y+21;
clear(x,y,21);
if(k==127)
{
lcd_cs=0;
turnon();
clear_1(24,0);
num = 0;
Adc_cs = 0 ;
lcd_wr = 0 ;
lcd_wr = 1 ;
Adc_cs = 1 ;
EX1=1;
TH0 = dH;
TL0 = dL;
ET0=1;
EA = 1;
clear_1(8,0);
clear_1(16,0);
clear_1(24,0);
clear_1(32,0);
clear_1(40,0);
x=32;y=25;
clear(x,y,21);
WriteD(24,(x_data[0]>>1)+40);
y=y+21;
clear(x,y,21);
k=0;
}
k++;
}
}
}
void interrupt_handle() interrupt 2 using 1
{
uchar idata temp_data;
EA=0; //CPU关中断
lcd_cs=1;
if(num!=127)
{
Adc_cs = 0 ;
P0=0xff;
lcd_a0=0;
temp_data=P0;
lcd_a0=1;
Adc_cs = 1 ;
if(num==0)
{
if((temp_data>125)&(temp_data<135))
{
x_data[0]=temp_data;
num++;
}
}
else if(num==1)
{
if(temp_data<x_data[0])
{
x_data[1]=temp_data;
num++;
}
else if((temp_data>125)&(temp_data<135))
{
x_data[0]=temp_data;
num=1;
}
else num=0;
}
else{
x_data[num]=temp_data;
num++;
}
EX1=1;
}
else EX1=0;
lcd_cs=0;
EA=1;
}
void timer0(void) interrupt 1 using 1
{
EA=0;
lcd_cs=1;
if(num!=127)
{
Adc_cs = 0 ;
lcd_wr = 0 ;
lcd_wr = 1 ;
Adc_cs = 1 ;
TH0 = dH;
TL0 = dL;
ET0 = 1;
}
else ET0 = 0;
lcd_cs=0;
EA=1;
}
void wait(void)
{
unsigned int i;
for(i=0;i<5000;i++);
}
void interrupt_handle_key() interrupt 0 using 1
{
EA=0; //CPU关中断
lcd_cs=1;
wait(); //键盘消抖延时
if (Int_wire==0)
{
key_pressed=ON;
P2=0xFF;
key_no=P2&0x0F; //读取P2口的低四位显示数据编码
}
lcd_cs=0;
EA=1; //CPU开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -