📄 123.c
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA_PORT P0
sbit BUSY=P3^4;
sbit REQ=P3^5;
sbit RESET=P3^6;
sbit P10=P1^0;
/*----------------------------------------------------------------------------------------------------------------- */
uchar table0[]={0x30,0x25,0x1a,0x25,0x12,0x2e,0x2a,0x5d,0x31,0x01,0x34,0x51,0x12,0x2b,0x15,0x05}; //信号参数选择菜单
uchar table1[]={0x35,0x5d,0x2f,0x32,0x12,0x08}; //正弦波
uchar table2[]={0x28,0x5d,0x1d,0x27,0x12,0x08}; //三角波
uchar table3[]={0x17,0x1d,0x12,0x08,0x12,0x08}; //方波波
uchar table4[]={0x29,0x08,0x23,0x48,0x12,0x08}; //扫描波
/*---------------------------------------------------------------------------------------------------------------*/
uchar set0[]={0x26,0x15,0x22,0x2a}; // 频率
uchar set1[]={0x17,0x59,0x16,0x28}; //幅度
uchar set2[]={0x35,0x1c,0x1f,0x35,0x11,0x28}; //占空比
//uchar set3[]={0x2f,0x40,0x2e,0x1b}; //相位
/*---------------------------------------------------------------------------------------------------------*/
uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //数值0~9
/*----------------------------------------------------------------------------------------------------------*/
/*********************************************************************************************/
uchar unit0[]={0x2e,0x30,0x30,0x48,0x7a};//.00Hz的ASC码
uchar unit1[]={0x56,0x70,0x70};//Vpp的ASC码
uchar unit2[]={0x2e,0x30,0x30,0x4b,0x48,0x7a};//.00KHz
/*************************************************************************************************/
/*************全局变量****************/
uchar temp=0; //主菜单选项选中标志
uchar temp1=0; //一级子菜单选项选中标志
uint f=0;//频率
uchar range=0;//幅度
uchar duty=0;//占空比
uchar w=0;//单位为HZ,当w=1时单位为KHZ
uchar flag;//发送数据标志位
uchar numf[5]; //频率数值存放数组
uchar numr[4]; //幅度数值存放数组
uchar numd[2]; //占空比数值存放数组
/******LCD初始化***********/
void lcd_init()
{
BUSY=1;
REQ=0;
RESET=1;
}
/*********写入数据***********/
void wr_lcd(uchar dat)
{
while(BUSY);
DATA_PORT=dat;
REQ=1;
while(BUSY);
REQ=0;
}
/*******写指令和坐标******/
void wr_zhiling(uchar com,uchar addr_x,uchar addr_y)
{
wr_lcd(com);
wr_lcd(addr_x);
wr_lcd(addr_y);
}
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start() //开机画面
{
uchar i;
for(i=0;i<8;i++)
{
wr_zhiling(0xf0,0x02+i,1);
wr_lcd(table0[2*i]);
wr_lcd(table0[2*i+1]);
}
}
void int_init() // 中断初始化
{
EX0=1;
IT0=0;
EA=1;
}
void serial_init() //串口初始化
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
}
/******************************主菜单显示*******************************************/
void main_menu(uchar a) //主菜单显示
{
uchar i,p;
p=a;
switch(p)
{
case 0: //正弦波
wr_lcd(0xf4);
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(table1[2*i]);
wr_lcd(table1[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++) //三角波
{
wr_zhiling(0xf0,i,1);
wr_lcd(table2[2*i]);
wr_lcd(table2[2*i+1]);
}
for(i=0;i<3;i++) //方波
{
wr_zhiling(0xf0,i,2);
wr_lcd(table3[2*i]);
wr_lcd(table3[2*i+1]);
}
for(i=0;i<3;i++) //扫描波
{
wr_zhiling(0xf0,i,3);
wr_lcd(table4[2*i]);
wr_lcd(table4[2*i+1]);
}
break;
case 1:
wr_lcd(0xf4);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(table1[2*i]);
wr_lcd(table1[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,1);
wr_lcd(table2[2*i]);
wr_lcd(table2[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,2);
wr_lcd(table3[2*i]);
wr_lcd(table3[2*i+1]);
}
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,3);
wr_lcd(table4[2*i]);
wr_lcd(table4[2*i+1]);
}
break;
case 2:
wr_lcd(0xf4);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(table1[2*i]);
wr_lcd(table1[2*i+1]);
}
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,1);
wr_lcd(table2[2*i]);
wr_lcd(table2[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,2);
wr_lcd(table3[2*i]);
wr_lcd(table3[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,3);
wr_lcd(table4[2*i]);
wr_lcd(table4[2*i+1]);
}
break;
case 3:
wr_lcd(0xf4);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(table1[2*i]);
wr_lcd(table1[2*i+1]);
}
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,1);
wr_lcd(table2[2*i]);
wr_lcd(table2[2*i+1]);
}
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,2);
wr_lcd(table3[2*i]);
wr_lcd(table3[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++)
{
wr_zhiling(0xf0,i,3);
wr_lcd(table4[2*i]);
wr_lcd(table4[2*i+1]);
}
wr_lcd(0xfa);
break;
}
}
/************************************************************************/
/**************************一级子菜单显示********************************/
void sub_menu1(uchar k)
{
uchar l,i;
l=k;
switch(l)
{
case 0: //频率
wr_lcd(0xf4);
wr_lcd(0xfa);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
break;
case 1: //频率
wr_lcd(0xf4);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
break;
case 2: //频率
wr_lcd(0xf4);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
wr_lcd(0xfa);
break;
}
}
/*****************************************************************************/
/************************显示设定的参数的大小******************************/
void display_data(uchar sta,uint x,uchar y,uchar z,uchar v)
{
uchar l,i;
l=sta;
for(i=0;i<5;i++)
{
numf[i]=0;
}
for(i=0;i<4;i++)
{
numr[i]=0;
}
for(i=0;i<4;i++)
{
numd[i]=0;
}
numf[0]=x%10; //频率
numf[1]=x%100/10;
numf[2]=x%1000/100;
numf[3]=x%10000/1000;
numf[4]=x/10000;
numr[0]=y%10; //幅度
numr[1]=y%100/10;
numr[2]=y%1000/100;
numr[3]=y/1000;
numd[0]=z%10; //占空比
numd[1]=z%100/10;
// numd[2]=z%1000/100;
// numd[3]=z%10000/1000;
// numd[4]=z/10000;
switch(l)
{
case 0: //频率
wr_lcd(0xf4);
wr_lcd(0xfa);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
wr_lcd(0xfa);
//////////////////////////////////////////////////// //显示频率的数值
if(v==0)
{
for(i=0;i<5;i++) //.00HZ
{
wr_zhiling(0xf9,0x13+i,0);
wr_lcd(unit0[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x12-i,0);
wr_lcd(num[numf[i]]);
}
}
if(v==1)
{
for(i=0;i<6;i++) //.00Khz
{
wr_zhiling(0xf9,0x12+i,0);
wr_lcd(unit2[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x11-i,0);
wr_lcd(num[numf[i]]);
}
}
//////////////////////////////////////////////////////////////////////
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
for(i=0;i<3;i++) //VPP
{
wr_zhiling(0xf9,0x15+i,0x10);
wr_lcd(unit1[i]);
}
//////////////////////////////////////////////////////////////
for (i=0;i<2;i++) // 00.00
{
wr_zhiling(0xf9,0x14-i,0x10);
wr_lcd(num[numr[i]]);
}
wr_zhiling(0xf9,0x12,0x10); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x13-i,0x10);
wr_lcd(num[numr[i]]);
}
//////////////////////////////////////////////////////////////////
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
wr_zhiling(0xf9,0x17,0x20); //%
wr_lcd(0x25);
//////////////////////////////////////
for(i=0;i<2;i++ ) //00
{
wr_zhiling(0xf9,0x16-i,0x20);
wr_lcd(num[numd[i]]);
}
/* wr_zhiling(0xf9,0x14,0x20); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x15-i,0x20);
wr_lcd(num[numd[i]]) ;
} */
//////////////////////////////////////
break;
case 1: //频率
wr_lcd(0xf4);
for(i=0;i<2;i++)
{
wr_zhiling(0xf0,i,0);
wr_lcd(set0[2*i]);
wr_lcd(set0[2*i+1]);
}
//////////////////////////////////////////////////// //显示频率的数值
if(v==0)
{
for(i=0;i<5;i++) //.00HZ
{
wr_zhiling(0xf9,0x13+i,0);
wr_lcd(unit0[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x12-i,0);
wr_lcd(num[numf[i]]);
}
}
if(v==1)
{
for(i=0;i<6;i++) //.00Khz
{
wr_zhiling(0xf9,0x12+i,0);
wr_lcd(unit2[i]);
}
for(i=0;i<5;i++)
{
wr_zhiling(0xf9,0x11-i,0);
wr_lcd(num[numf[i]]);
}
}
//////////////////////////////////////////////////////////////////////
wr_lcd(0xfa);
for(i=0;i<2;i++) //幅度
{
wr_zhiling(0xf0,i,1);
wr_lcd(set1[2*i]);
wr_lcd(set1[2*i+1]);
}
wr_lcd(0xfa);
for(i=0;i<3;i++) //VPP
{
wr_zhiling(0xf9,0x15+i,0x10);
wr_lcd(unit1[i]);
}
//////////////////////////////////////////////////////////////
for (i=0;i<2;i++) // 00.00
{
wr_zhiling(0xf9,0x14-i,0x10);
wr_lcd(num[numr[i]]);
}
wr_zhiling(0xf9,0x12,0x10); //写个小数点.
wr_lcd(0x2e);
for(i=2;i<4;i++) //00
{
wr_zhiling(0xf9,0x13-i,0x10);
wr_lcd(num[numr[i]]);
}
//////////////////////////////////////////////////////////////////
for(i=0;i<3;i++) //占空比
{
wr_zhiling(0xf0,i,2);
wr_lcd(set2[2*i]);
wr_lcd(set2[2*i+1]);
}
wr_zhiling(0xf9,0x17,0x20); //%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -