网站首页 > 文章中心 > 其它

c语言锯齿波函数

作者:小编 更新时间:2023-10-08 18:10:50 浏览量:75人看过

基于单片机的波形发生器设计,C语言程序,有个很小的问题,求解决

void juchi() //锯齿波函数

{ uchar i;

dump(10+p);} //延时实现频率可调,p是变量

i=0x00; }

void zhengxian()

c语言锯齿波函数-图1

{

}

i=0;

//最简单的方法就是复制juchi这个函数

void zhengxian() //正弦波函数

急求用DAC接口电路,编写产生负向锯齿波、三角波、梯形波的程序

sbit k0=P1^0;

c语言锯齿波函数-图2

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:

试用c语言编写一个能输出锯齿波信号的单片机c51程序

#包括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]);

c语言锯齿波函数-图3

其他

无效的主要()/ /主函数

显示();

而(1)

P0 =表[I] [J];

(k == 0)/ /切换程序?

(k == 0);

(K == 0)

+ +;

而(k == 0);

dac0832 c程序

#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(); /* 产生一段方波 */

at89c52产生三角波,锯齿波,方波,要求用c语言写,芯片是D0832

#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语言锯齿波函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章