功能要求:
1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。
2.LCD1602液晶显示波形种类和频率值(10-100HZ)。
3.按键设置波形种类和设定频率步进值。
4.电位器器改变振幅(0V-3.5V稳定)。
6.有四个指示灯分别指示发出的是哪种波形,方便明了。
uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
}; //锯齿波取码
void delay(uint xms) //延时函数
{
int a,b;
for(a=xms;a>0;a--)
for(b=110;b>0;b--);
}
void write_com(uchar com) //写命令函数
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void write_date(uchar date) //写数据函数
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
//自定义字符集
void Lcd_ram()
{
uint i,j,k=0,temp=0x40;
for(i=0;i<7;i++)
{
for(j=0;j<8;j++)
{
write_com(temp+j);
write_date(zifu[k]);
k++;
}
temp=temp+8;
}
}
void init_lcd() //初始化函数
{
uchar i;
lcden=0; //默认开始状态为关使能端,见时序图
Lcd_ram();
write_com(0x0f);
write_com(0x38); //显示模式设置,默认为0x38,不用变。
write_com(0x01); //显示清屏,将上次的内容清除,默认为0x01.
write_com(0x0c); //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06); //设置光标状态默认0x06,为读一个字符光标加1.
write_com(0x80); //设置初始化数据指针,是在读指令的操作里进行的
for(i=10;i<20;i++) //显示初始化
{
write_date(table1[i]);
}
write_com(0x80+0x40);
for(i=0;i<9;i++)
{
write_date(table1[i]);
}
write_com(0x80+10);
write_date(0);
write_date(1);
write_date(0);
write_date(1);
write_date(0);
write_date(1);
write_com(0x80+0x40+0x09);
write_date(' ');
write_date('1');
write_date('0');
write_date('.');
write_date('0');
write_date('H');
write_date('z');
}
void initclock() //时钟初始化
{
TMOD=0x01;
TH0=a;
TL0=b;
EA=1;
ET0=1;
TR0=1;
}
void display() //显示函数
{
uchar qian,bai,shi,ge;
qian=pinlv/1000;
bai=pinlv%1000/100;
shi=pinlv%1000%100/10;
ge=pinlv%1000%100%10;
write_com(0x80+0x40+0x09);
if(qian==0)
write_date(' ');
else
write_date(table[qian]);
if(qian==0&&bai==0)
write_date(' ');
else
write_date(table[bai]);
write_date(table[shi]);
write_date('.');
write_date(table[ge]);
write_date('H');
write_date('z');
if(boxing==0)
{
write_com(0x80+10);
write_date(0);
write_date(1);
write_date(0);
write_date(1);
write_date(0);
write_date(1);
led3=1;
led0=0;
}
if(boxing==1)
{
write_com(0x80+10);
write_date(2);
write_date(3);
write_date(2);
write_date(3);
write_date(2);
write_date(3);
led0=1;
led1=0;
}
if(boxing==2)
{
write_com(0x80+10);
write_date(4);
write_date(5);
write_date(4);
write_date(5);
write_date(4);
write_date(5);
led1=1;
led2=0;
}
if(boxing==3)
{
write_com(0x80+10);
write_date(6);
write_date(6);
write_date(6);
write_date(6);
write_date(6);
阅读全文