信号发生器小程序
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
write_date(table[shi]);
delay(5);
write_date(table[ge]);
delay(5);
write_date('H');
delay(5);
write_date('Z');
delay(5);
if(boxing==0)
{
write_com(0x80+7);
write_date('s');
write_com(0x38);//显示模式设置,默认为0x38,不用变。
write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01.
write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1.
};//锯齿波取码
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);
write_date('i');
write_date(' ');
}
}
void keyscan()//键盘检测函数
{
if(s1==0)
{
EA=0;
delay(2);
if(s1==0)
{
while(!s1);
if(num<14)
num++;
display();
if(num>9)
{
EA=0;
}
else
EA=1;
write_date('i');
write_date('n');
write_date(' ');
write_date(' ');
write_date(' ');
write_date(' ');
}
if(boxing==1)
{
write_com(0x80+7);
write_date('j');
write_date('u');
write_date('n');
write_date(' ');
write_date(' ');
write_date(' ');
write_date(' ');
write_com(0x80+0x40+0xa);
write_date(' ');
write_date('1');
write_date('0');
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('H');
delay(5);
write_date('Z');
delay(5);
}
void display()//显示函数
{
uchar bai,shi,ge;
if(num<10)
{
pinlv=num*10+10;
}
if(num>9)
{
pinlv=(num-9)*100+100;
}
};//三角波取码
uchar code juchi[64]={
0,4,8,12,16,20,24,26,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,
128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248
write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的
}
void initclock()//时钟初始化
{
uint i;
TMOD=0x01;
TH0=(65536-1563)/256;
TL0=(65536-1563)%256;
EA=1;
ET0=1;
TR0=1;
for(i=10;i<17;i++)//显示初始化
};//矩形波取码
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('i');
write_date('a');
write_date('o');
}
if(boxing==3)
{
write_com(0x80+7);
write_date('j');
write_date('u');
write_date(' ');
write_date('c');
write_date('h');
#include<reg52.h>//包含头文件
#include<intrins.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit s1=P3^5;//定义按键的接口
sbit s2=P3^6;
sbit s3=P3^7;
sbit lcdrs=P1^0;//液晶控制位
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
sbit lcden=P1^1;
sbit csda=P3^3;//DA控制位
sbit wr=P3^4;
char num=0,boxing,u;//定义全局变量
uint pinlv;
uchar code table[]="0123456789";//定义显示的数组
uchar code table1[]="frequence:boxing:";
_nop_();_nop_();_nop_();
}
}
break;
case 1:
while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=juxing[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
lcden=0;
}
void write_date(uchar date)//写数据函数
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void init_lcd()//初始化函数
{
lcden=0;//默认开始状态为关使能端,见时序图
write_com(0x0f);
bai=pinlv/100;
shi=pinlv%100/10;
ge=pinlv%100%10;
write_com(0x80+0x40+0xa);
if(bai<1)
{
write_date(' ');
delay(5);
}
if(bai!=0)
{
write_date(table[bai]);
delay(5);
{
write_date(table1[i]);
delay(5);
}
write_com(0x80+0x40);
for(i=0;i<10;i++)
{
write_date(table1[i]);
delay(5);
}
write_com(0x80+7);
write_date('s');
write_date('i');
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
};//正弦波取码
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
boxing++;
if(boxing==4)
{
boxing=0;
}
display();
EA=1;
}
}
}
void delaym()//短暂延时
{
_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();
}
void main()//主函数
{
uchar delay_dat=0;
uchar code sin[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
}
}
if(s2==0)
{
EA=0;
delay(5);
if(s2==0)
{
while(!s2);
num--;
if(num<0)
{
num=0;
}
display();
if(num>9)
{
EA=0;
}
else
EA=1;
}
}
if(s3==0)
{
EA=0;
delay(5);
if(s3==0)
{
while(!s3);
init_lcd();
initclock();
csda=0;
wr=0;
while(1)
{
keyscan();
switch(num)
{
case 10://200hz
switch(boxing)
{
case 0:while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=sin[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('x');
write_date('i');
write_date('n');
write_date('g');
}
if(boxing==2)
{
write_com(0x80+7);
write_date('s');
write_date('a');
write_date('n');
write_date('j');
_nop_();_nop_();_nop_();
}
}
break;
case 2:
while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=sanjiao[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no
write_date(table[shi]);
delay(5);
write_date(table[ge]);
delay(5);
write_date('H');
delay(5);
write_date('Z');
delay(5);
if(boxing==0)
{
write_com(0x80+7);
write_date('s');
write_com(0x38);//显示模式设置,默认为0x38,不用变。
write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01.
write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪
write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1.
};//锯齿波取码
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);
write_date('i');
write_date(' ');
}
}
void keyscan()//键盘检测函数
{
if(s1==0)
{
EA=0;
delay(2);
if(s1==0)
{
while(!s1);
if(num<14)
num++;
display();
if(num>9)
{
EA=0;
}
else
EA=1;
write_date('i');
write_date('n');
write_date(' ');
write_date(' ');
write_date(' ');
write_date(' ');
}
if(boxing==1)
{
write_com(0x80+7);
write_date('j');
write_date('u');
write_date('n');
write_date(' ');
write_date(' ');
write_date(' ');
write_date(' ');
write_com(0x80+0x40+0xa);
write_date(' ');
write_date('1');
write_date('0');
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('H');
delay(5);
write_date('Z');
delay(5);
}
void display()//显示函数
{
uchar bai,shi,ge;
if(num<10)
{
pinlv=num*10+10;
}
if(num>9)
{
pinlv=(num-9)*100+100;
}
};//三角波取码
uchar code juchi[64]={
0,4,8,12,16,20,24,26,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,
128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248
write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的
}
void initclock()//时钟初始化
{
uint i;
TMOD=0x01;
TH0=(65536-1563)/256;
TL0=(65536-1563)%256;
EA=1;
ET0=1;
TR0=1;
for(i=10;i<17;i++)//显示初始化
};//矩形波取码
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('i');
write_date('a');
write_date('o');
}
if(boxing==3)
{
write_com(0x80+7);
write_date('j');
write_date('u');
write_date(' ');
write_date('c');
write_date('h');
#include<reg52.h>//包含头文件
#include<intrins.h>
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit s1=P3^5;//定义按键的接口
sbit s2=P3^6;
sbit s3=P3^7;
sbit lcdrs=P1^0;//液晶控制位
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
sbit lcden=P1^1;
sbit csda=P3^3;//DA控制位
sbit wr=P3^4;
char num=0,boxing,u;//定义全局变量
uint pinlv;
uchar code table[]="0123456789";//定义显示的数组
uchar code table1[]="frequence:boxing:";
_nop_();_nop_();_nop_();
}
}
break;
case 1:
while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=juxing[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
lcden=0;
}
void write_date(uchar date)//写数据函数
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void init_lcd()//初始化函数
{
lcden=0;//默认开始状态为关使能端,见时序图
write_com(0x0f);
bai=pinlv/100;
shi=pinlv%100/10;
ge=pinlv%100%10;
write_com(0x80+0x40+0xa);
if(bai<1)
{
write_date(' ');
delay(5);
}
if(bai!=0)
{
write_date(table[bai]);
delay(5);
{
write_date(table1[i]);
delay(5);
}
write_com(0x80+0x40);
for(i=0;i<10;i++)
{
write_date(table1[i]);
delay(5);
}
write_com(0x80+7);
write_date('s');
write_date('i');
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
};//正弦波取码
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
boxing++;
if(boxing==4)
{
boxing=0;
}
display();
EA=1;
}
}
}
void delaym()//短暂延时
{
_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();
}
void main()//主函数
{
uchar delay_dat=0;
uchar code sin[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
}
}
if(s2==0)
{
EA=0;
delay(5);
if(s2==0)
{
while(!s2);
num--;
if(num<0)
{
num=0;
}
display();
if(num>9)
{
EA=0;
}
else
EA=1;
}
}
if(s3==0)
{
EA=0;
delay(5);
if(s3==0)
{
while(!s3);
init_lcd();
initclock();
csda=0;
wr=0;
while(1)
{
keyscan();
switch(num)
{
case 10://200hz
switch(boxing)
{
case 0:while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=sin[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_date('x');
write_date('i');
write_date('n');
write_date('g');
}
if(boxing==2)
{
write_com(0x80+7);
write_date('s');
write_date('a');
write_date('n');
write_date('j');
_nop_();_nop_();_nop_();
}
}
break;
case 2:
while(s1&&s2&&s3)
{
for(u=0;u<64;u++)
{
P2=sanjiao[u];
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no