📄 aa.c
字号:
#include <string.h>
#include<reg51.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DA0832 P2
uchar TAB[]={0,1,2,3,4,5,6,7,8,9};
uchar disp[6]={' ',' ',' ',' ','H','Z'};
uint freq=0;//频率变量
uchar code table1[]="Sinusoidal Wave"; //正弦波
uchar code table2[]="Pyramidal Wave"; //三角波
uchar code table3[]="Sawtooth Wave"; //锯齿波
uchar code table4[]="Square Wave"; //方波
uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99, //正弦波列表
0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,
0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,
0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,
0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,
0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,
0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,
0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,
0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,
0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,
0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,
0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,
0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,
0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,
0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,
0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,
0x72,0x76,0x79,0x7c,0x80 };
/*------------------------位定义--------------------------------*/
/*sbit PB0=P1^0;
sbit PB1=P1^1;
sbit PB2=P1^2;
sbit PB3=P1^3;
sbit PB4=P1^4;
sbit PB5=P1^5;
sbit PB6=P1^6;
sbit PB7=P1^7;
/*----------------------*/
/*sbit Pc0=P2^0;
sbit Pc1=P2^1;
sbit Pc2=P2^2;
sbit Pc3=P2^3;
sbit Pc4=P2^4;
sbit Pc5=P2^5;
sbit Pc6=P2^6;
sbit Pc7=P2^7;*/
/*---------------------------*/
sfr16 DPTR=0x82;//声明DPTR
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
sbit busy=P0^7;
uchar fun=0,b=0,c=0,d=0,e=0,tl,th;
/*-------------函数声明-------------------*/
int keyscan();
void key1(void);
void key2(void);
void key3(void);
void key4(void);
void delay_ms(int ms);
void write_cmd(uchar cmd) ;
void write_data(uchar d) ;
void init_lcd();
void lcd_display_xy(char *string , uchar x, uchar y);
void inter_int();
/*******主程序**********/
main()
{
inter_int();
init_lcd();
P2=0xff;
while(1)
{
keyscan();
}
}
/*----------定时器初始---------------*/
void inter_int()
{
TMOD=0X01;
TR0=1;
th=0xff;
tl=0xd0;
TH0=th;
TL0=tl;
ET0=1;
EA=1;
}
/*******延时**********/
void delay_ms(int ms)
{
uchar i;
uint j;
for(j=2*ms;j>0;j--)
for(i=250;i>0;i--);
}
/******扫描*********/
int keyscan()
{
uchar key_value;
uchar key_temp;
do
{
P1=0xff;
key_temp=P1;
delay_ms(5);
P1=0xff;
key_value=P1;
}
while(key_value!=key_temp);
if(key_value==0xfe)key1();
if(key_value==0xfd)key2();
if(key_value==0xfb)key3();
if(key_value==0xf7)key4();
}
/*-------------1602-------------------*/
void write_cmd(uchar cmd)
{
RS=0;
RW=0;
E=0;
P0=cmd;
delay_ms(2);
E=1;
delay_ms(2);
E=0;
}
void write_data(uchar d)
{
RS=1;
RW=0;
E=0;
P0=d;
delay_ms(2);
E=1;
delay_ms(2);
E=0;
}
void lcd_display_xy(char *string , uchar x, uchar y)
{ uchar i;
write_cmd(0x80+0x40*y+x);
for (i=0;i<strlen(string);i++)
write_data(string[i]);
}
void init_lcd()
{
write_cmd(0x3f);
write_cmd(0x0c);//不显示光标
write_cmd(0x06);//指针自加一,整屏显示不移动
write_cmd(0x01);//清屏
// lcd_display_xy(table2,2,0);
}
/*-------------波形设置---------------------*/
void key1(void) //1键选择发波类型,1为正弦波,2为三角波,3为方波,4为锯齿波
{
fun++;
if(fun==5)fun=0x00;
}
void key2(void) //2键加大频率
{
tl++;
if(tl==0x1f)th++;
}
void key3(void) //3键减小频率
{
tl--;
if(tl==0x00)th--;
}
void key4(void) //4键显示频率
{
TR0=0; //关闭T0
DPL=TL0;
DPH=TH0;
freq=DPTR; //计数量放入freq
if(freq>=10000) //超过10KHZ
{
disp[4]=TAB[freq/1000]; // 十位
disp[3]=TAB[(freq/1000)%10]; //个位
disp[2]='K';
}
else //低于10KHZ
{
disp[5]=TAB[(freq/1000)%10]; //千位
disp[4]=TAB[(freq/100)%10]; //百
disp[3]=TAB[(freq/10)%10]; //十位
disp[2]=TAB[freq%10]; //个位
}
lcd_display_xy(disp,2,0);
TR0=1;
}
/*-----------------中断服务程序---------------------------*/
void time0_int(void) interrupt 1
{
TR0=0;
if(fun==1)
{
DA0832=tosin[b]; //正弦波
b++;
}
else if(fun==2) //三角波
{
if(c<128)
DA0832=c;
else
DA0832=255-c;
c++;
}
else if(fun==3) // 方波
{
d++;
if(d<=128)
DA0832=0x00;
else
DA0832=0xff;
}
else if(fun==4) //锯齿波
{
if(e<255)
DA0832=e;
else
DA0832=0;
e++;
}
TH0=th;
TL0=tl;
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -