《基于51单片机的三角波发生器》由会员分享,可在线阅读,更多相关《基于51单片机的三角波发生器(7页珍藏版)》请在人人文库网上搜索。
1.包括/振幅05可调频率1001000#,包括#定义uchar无符号字符#定义uint无符号整数#定义dac1 _ h x字节0x 7 fff定义/1230高地址#dac1 _ l x字节0x3fff/1230低位地址,并开始转换sbit cs 7221=p11.选择/7221芯片sbit din 7221=p10;数据端/7221sbit clk 7221=p12./7221时钟端子uchar DISPBUF8=一、二、三、四、六7 ;斯比特显示缓冲区so=p15./165斯比特的数据输出sh=p14./转移165班结束斯比特clk=p13;/165的时钟端子#定义。
2、fosc12 /晶体频率uint idata time0 _ 0/临时变量,用于计算计时uint time0/定时长度uint吕品=100/默认频率为100TIME 1=0./用于计时标记比特石开口=0(uint n);/延迟子程序初始无效7221(无效);/MAX7221初始化无效WR7221(uchar地址,uchar数据);/MAX7221编写程序void max 7221 display(uchar *缓冲区);/MAX7221显示程序void time 2 ms(void);/定时器0初始化程序void time 0 _ int(void);/定时器0中。
3.无效发送断服务程序(uchar高,uchar低);/DAC1230输出转换开始无效DAC1230(无效)uchar scankey(无效);/键盘扫描无效键(void);/键盘处理无效显示(void);/显示频率main()initial 7221()MAX7221max 7221 display(DISPBUF0);/01234567延迟(1000)disp();/显示频率时间为2m秒();/定时器初始化,(1)键();/键盘处理如果(石);=1)/允许三角波输出DAC 1230()(uchar高,uchar低)/数模转换器1230输出。
4、转换开始DAC1_h=(高4)|(低4)DAC1 _ l=(low 4)开始转换/低4位输出Void DAC1230(void)/输出三角波uchar i,k;对于(k=0;k=15K )/上升高字节的调整(I=0;I=5;I )/低字节在一个周期内调整16*6=96个输出发送(k,I * 51);/DAC1230输出;同时(TIME1!=1);/等到时间到了时间1=0./清除时间标记(k=0;k=15K )/减少高字节调整(I=0;I=5;I )/低字节调整发送(15)-k,255-I * 51);同时做;(TIME1!=1);/等到时间到了时间1=0./清除时间标记(k=0;k=15K )/减少高字节调整(I=0;I=5;I )/低字节调整发送(15)-k,255-I * 51);同时做;(TIME1!=1);/等到时间到了时间1=0./清除时间。
5.标记/扫描键盘。当没有按钮时,返回键值i=(0-7) j=0f。uchar scankey(无效)uchar i=0,j=0x0fsh=0;/收加延迟(1);sh=1;/你可以移动延迟(100);(I=0;i8;I )读取/8位密钥clk=0./如果先读第一个数字,(so=0)/按下相应键,为0,否则为1返回(I);/返回密钥号clk=1./上升沿偏移返回(j);/不按键返回0f无效键(无效)uchar k;uint pinlv0/临时频率号pinlv0=吕品;k=scan key()(k=0) /频率调频率调节按钮延迟(1000)/延迟抖动k=。
6、scan key();如果(k=0) /按下按钮调整频率 do k=scan key(); while(k=0);/为()释放等待按钮;(k=scan key();添加if(k=1)/延迟(1000)k=scan key();添加if(k=1)/ do k=scan key();同时(k=1);/等待按钮被释放pinlv当频率超过1000赫兹时,如果(引脚0=1001) /设置为100pinlv0=100否则,如果(k=2)/减延(1000)k=scan key();如果(k=2)/减 do k=scan key();而(k=2)pin LV 0。
7.-;如果频率低于100赫兹,(pinlv0=99) /设置为1000pinlv0=1000否则,如果(k=3)/确认键延迟(1000)k=scan key();如果(k=3)/确认键 do k=scan key();同时(k=3)/等待按钮释放吕品=pinlv0时间2毫秒()disp();/突破显示变化频率;/返回否则,如果(k=4)/取消键延迟(1000)k=scan key();如果(k=4)/取消键 do k=scan key();而(k=4);/等待按钮被释放打破;/返回否则,如果(k=5)(石开=0)/是否按下三角波输出按钮延。
8.延迟(1000)k=scan key();if(k=5) do k=scan key();而(k=5);/等待按钮被释放石开=1./输出三角波否则,如果(k=6)(石开=1)/按下延迟(1000)停止输出三角波的按钮;/延迟抖动k=scan key();if(k=6) do k=scan key();而(k=5)/等待按钮释放石头=0./停止输出三角波Void time2ms(void) /T0定时器初始化TMOD=0x 01;/T0工作模式1/*定时设置*/时间0=1万/吕品/96;/每次数模转换的时间为0 _ 0=65536-时间0 * fosc/12;/计算初始。
9、始值TH0=(时间0 _ 0/256);/加载定时器0的初始值TL0=(时间0 _ 0% 6);TR0=1./启动定时器0ET0=1./打开定时器0中断EA=1./打开总中断/*定时器0中断服务子程序,*/void time0_int(void)中断1TH0=(时间0 _ 0/256);/重新加载定时器0的初始值TL0=(时间0 _ 0% 6);时间1=1./标志位时间无效延迟(uint n) /延迟程序uint i1,J1;对于(i1=0;i1i)?1:0;/从高到低依次开始;_ nop _();_ nop _();CLK 7221=1./锁定时钟高上升边缘的数据_ nop _();_ 。
10、nop _();对于(I=0;i8;I) /写入8位数据CLK 7221=0;/时钟低DIN7221=(数据(0x80i)?1:0;/从高到低依次开始;_ nop _();_ nop _();CLK 7221=1./锁定时钟高上升边缘的数据_ nop _();_ nop _();cs 7221=1./芯片选择无效Void Initial7221(void)/MAX7221初始化WR7221(0x0A,0x0A);/亮度地址0AH,0x000x0F,0x0F是最亮的WR7221(0x0B,0x 07)BH,0x000x最多扫描8个数字管WR7221(0x0C,0x 01)x0C.0x003360关闭;0x01:正常WR7221(0x09,0xff);/编码模式地址0x09。0x000xFF:哪个是1,哪个支持编码无效max7221显示(uchar *缓冲区)/max7221显示子程序uchar I;对于(I=0;i8;I)/8支max数码管7221显示器WR7221(i 1,*(缓冲区I);/调整MAX7221写子程序无效显示(无效)DISPBUF0=吕品/1000;/千dispbuf1=pinlv00/100;/百位数dispbuf2=pinlv0/10;/十位数dispbuf3=pinlv;/十位数Max722。