void juchi() //锯齿波函数
{ uchar i;
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
void zhengxian()
{
}
i=0;
//最简单的方法就是复制juchi这个函数
void zhengxian() //正弦波函数
sbit k0=P1^0;
sbit k1=P1^1;
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,
}; //用于生成正弦
unsigned char kscan() //键盘扫描函数
unsigned char kscannum,t;
P1=0xff;
t=P1;
if(~(t0xff))
if(k0==0)
kscannum=1;
else if(k1==0)
else
kscannum=0;
return kscannum;
rd=0;
wr=0;
void fangbo()//产生方波函数
EA=1; //开总中断
ET0=1; //计时器T0工作
TMOD=1;
TR0=1; //开启T0
TH0=0xff; //装入初值
void sin()//产生正弦波函数
unsigned inti;
do{
i=i+1;
void juchibo()//产生锯齿波函数
void sanjiaobo()//产生三角波函数
void tixingbo()//产生梯形波函数
unsigned char i;
void timer0(void) interrupt 1//中断函数
TH0=0xff; //重新装入初值
TR0=1;
/*主函数*/
void main()
do
flag=kscan();
}while(!flag);//等待按键按下
while(1)
switch(flag)
case 1:
sin();
}while(flag==1);//产生正弦波
break;
fangbo();
TR0=0;
sanjiaobo();
tixingbo();
juchibo();
default:
#包括intrins.h的
#定义UCHAR无符号的字符/ /宏定义
#定义UINT无符号整数
UCHAR I,J,N,Z,/ /定义全局变量
UCHAR代码STR1 [] = {"三角波"};
为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
};
无效延迟(UINT Z)/ /延时程序
(Z,Z 0,Z - )
RS = 0; / /选择指令寄存器
RW = 0; / /写操作
E = 1 / /使能端
P1 = CMD;
延迟时间(1);
E = 0;
RS = 1; / /选择数据寄存器
E = 1; / /结束
Lcd_init();
(我== 0)
WRITE_DATA(STR0 [N]);
否则,如果(我== 1)
WRITE_DATA(STR1 [N]);
其他
无效的主要()/ /主函数
显示();
而(1)
P0 =表[I] [J];
(k == 0)/ /切换程序?
(k == 0);
(K == 0)
+ +;
而(k == 0);
#pragma db oe sb
#i ncludeabsacc.h
#define uchar unsigned char
void delay(uchar t) { /* 延时函数 */
while(t--);
void saw(void) { /* 锯齿波发生函数 */
uchar i;
void square(void) { /* 方波发生函数 */
delay(0x10);
void main(void) {
uchar i,j;
i=j=0xff;
while(i--) {
saw(); /* 产生一段锯齿波 */
while(j--) {
square(); /* 产生一段方波 */
#define uchar unsigned char
#define uint unsigned int
#define DAdata P0//DA数据端口
uchar wavecount; //'抽点'计数
uchar THtemp,TLtemp;//传递频率的中间变量
//uint T_temp;
uchar judge=1; //在方波输出函数中用于简单判别作用
uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "sawtooth Wave ""Select Wave: " "press No.1 key! "};
/*uchar code wave_freq_adjust[]={ //频率调整中间值
uint code wave_freq_adjust[]={ //频率调整中间值
/*uchar code waveTH[]={
0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar code waveTL[]={
/***********这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求************/
uchar code waveTH[]={
0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
/*************************************************************************************************/
uchar code sawtooth_tab[]={
void delay(uchar z)
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
void triangle_out()//三角波输出
DAdata=triangle_tab[wavecount++];
void sine_out() //正弦波输出
DAdata=sine_tab[wavecount++];
void square_out() //方波输出
judge=~judge;
if(judge==1) DAdata=0xff;
else DAdata=0x00;
void sawtooth_out() //锯齿波输出
DAdata=sawtooth_tab[wavecount++];
#define lcd_ports P1
void write_com(uchar com)
rs=0;//置零,表示写指令
lcden=0;
lcd_ports=com;
lcden=1;
void write_date(uchar date)
rs=1;//置1,表示写数据(在指令所指的地方写数据)
lcd_ports=date;
void disp_lcd(uchar addr,uchar *temp1)
uchar num;
write_com(addr);
delay(1); //延时一会儿?
write_date(temp1[num]);//或者这样写write_date(*(temp1+num));
delay(1);
void init_lcd()
//uchar num;
lcden=0; //可有可无?
rw=0; //初始化一定要设置为零,表示写数据
write_com(0x0c); //初始设置
write_com(0x01); //清零
write_date(table[num]);
write_date(table1[num]);
} */
/*TMOD=0x01; //选用定时方式1
EA=1;//开总中断
ET0=1; //开定时器中断
TR0=1; //启动定时器*/
uchar i=0;
DAdata=0;
init_lcd();
waveform=0;
IT0=1; //设置外部中断0为下降沿触发
ET0=1; //开定时器中断
EX0=1;
EA=1;
//DAout(0xff); //可输出TTL波形
void timer0() interrupt 1
TH0=THtemp;
TL0=TLtemp;
if(waveform==0) sine_out();
else if(waveform==1) triangle_out();
void key_int0() interrupt 0
uchar keytemp;
uint total_freq; //总频率
EA=0; TR0=0; //关总中断与定时器
if(key==0) //确实有按键按下而引发中断
switch(keytemp)
case 0xe0://选择波形
waveform++;
case 0xd0: //频率按规定单位依次增加
wavefreq[waveform]++;
if(wavefreq[waveform]10) wavefreq[waveform]=1; // /*这边要用"10",因为它比"=11"可靠
break; // 性更高,使加数有个上限,不会一直加下去*/
case 0xb0: //频率按规定单位依次衰减
wavefreq[waveform]--;
if(wavefreq[waveform]1) wavefreq[waveform]=10; //这边要用"1",因为它比"=0"可靠性更高
THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_temp
TLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];
total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单位)
wavecount=0; //'抽点'计数清零
while(!key);
EA=1; TR0=1; //开启总中断与定时器
以上就是土嘎嘎小编为大家整理的c语言锯齿波函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!