51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序_第1页
51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序_第2页
51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序_第3页
51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序_第4页
51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

显示频率,宽度可调整,4种波形可生成正弦波,方波,锯齿波,三角波,希望你能喜欢,发送效果图,不要忘记采用我的回答#include#define uchar unsigned char#define uint unsigned int#define DAdata P0/DA数据端口sbit da _ S1=p2 0;/控制DAC0832的8位输入寄存器。只有全部为零时才能输出数据,否则输出将被锁定sbit da _ S2=p2 1;/控制DAC0832的8位DAC寄存器,并且只能在全部为零的情况下输出数据(传递状态)。否则,输出将被锁定sbit key=P3 2;Uchar wavecount/泵送点数Uchar THtemp、TLtemp/传播频率的中间变量uchar judge=1;/用于方波输出函数中的简单判别函数Uchar waveform/0、1、2表示三个波Uchar code freq _ unit 3=10,50,200 ;/3波的频率单位Uchar idata wavefreq3=1,1,1 ;/定义存储每个波的单位频率数的阵列单位uchar code LCD _ hang 1= sine wave triangle wave square wave select wave 3360 press no . 1ucharidata LCD _ hang 216= f=Hz ;Uchar code waveTH=0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff,0x ff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff,0x ff,0xec、0xf6、0xf9、0xfb、0xfc、0xfc、0xfd、0xfd、0x Fe ;Uchar code waveTL=0x06、0x8a、0x10、0x4e、0x78、0x93、0xa8、0xb3、0xbe、0xxc6、/正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde,/三角波频率调整中间值0x88、0x50、0x90、0x32、0x34、0xbe、0x4a、0xa3、0xe15、0x x2c ;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Uchar code triangle_tab= /每8个数字1次0x00、0x08、0x10、0x18、0x20、0x28、0x30、0x38、0x40、0x48、0x50、0x58、0x60、0x68、0x 400x80、0x88、0x90、0x98、0xxa0、0xa8、0xb 0、0xb 8、0xc0、0xc8、0xxd0、0xd8、0xe0、0xe8、0x c00xf8、0xxf 0、0xe8、0xe0、0xd8、0xxd0、0xc8、0xc0、0xb 8、0xb 0、0xa8、0xa0、0x98、0x90、0x b 80x78、0x70、0x68、0x60、0x58、0x50、0x48、0x40、0x38、0x30、0x28、0x20、0x18、0x10、0x 10Uchar code sine_tab256=/输出电压从0到最大(正弦波1/4部分)0x80、0x83、0x86、0x89、0xx8d、0x90、0x93、0x96、0x99、0x9c、0x9f、0xa2、0xa5、0xa8、0xbf,0xc2,0xc5,0xxc 7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0x df0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf6,0xxf 7,0xf8,0xf9,0xfa,0xfb,0xfc,0x fc/输出电压从最大值到0(正弦波的四分之一部分)0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xxf 7,0xee,0xec,0xea,0xe19,0xe17,0xe15,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd40xbf,0xbc,0xba,0xxb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,/输出电压从0到最小值(正弦波的四分之一部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0xx5d,0xx5a,0x57,0x 570x40、0xx3d、0xx3a、0x38、0x35、0x33、0x30、0xx2e、0xx2b、0x29、0x27、0x25、0x22、0x200x11、0x10、0x0e、0x0d、0x0b、0x0a、0x09、0x08、0x07、0x06、0x05、0x04、0x03、0x02、0x02/输出电压从最小值0(正弦波的1/4部分)0x00、0x00、0x00、0x00、0x00、0x01、0 x02、0 x02、0x03、0x04、0x05、0x06、0x07、0x08、0x 080x11、0x13、0x15、0x16、0x18、0x1a、0xx1c、0xx1e、0x20、0x22、0x25、0x27、0x29、0xx2b0x40、0x43、0x45、0x48、0x4c、0x4e、0x51、0x55、0x57、0xx5a、0xx5d、0x60、0x63、0x66、0x 66Void delay(uchar z)Uint x、y;for(x=z;x0;X-)for(y=110;y0;y-);Void triangle_out()/三角波输出DAdata=triangle _ tabwave count;if(wave count 64)wave count=0;DA _ S1=0;/打开8位输入寄存器DA _ S1=1;/关闭8位输入寄存器Void sine_out() /正弦波输出DAdata=sine _ tabwave count;DA _ S1=0;/打开8位输入寄存器DA _ S1=1;/关闭8位输入寄存器Void square_out() /方波输出Judge= judgeif(judge=1)DAdata=0x ff;Else DAdata=0x00DA _ S1=0;/打开8位输入寄存器DA _ S1=1;/关闭8位输入寄存器/* * * * * * * 1602液晶相关函数* * * * * * * * * * * * * * * * * * * * * */# define LCD _ ports1sbit RS=p2 2;sbit rw=p2 3;Sbit液晶屏en=p2 4;Void write_com(uchar com)RS=0;/设定0,表示写入指令LC den=0;Lcd _ ports=comdelay(5);LC den=1;delay(5);LC den=0;Void write_date(uchar date)RS=1;/设定1表示写入资料(将资料写入指令指向的地方)LC den=0;Lcd _ ports=datedelay(5);LC den=1;delay(5);LC den=0;Void disp _ LCD (uchar addr,uchar * temp1)Uchar numwrite _ com(addr);delay(1);/推迟一会儿?-嗯?-嗯?for(num=0;Num16Num)write _ date(temp 1num);/或write_date(*(temp1 num)delay(1);Void init_lcd()/uchar num;LC den=0;/可以吗?-嗯?-嗯?rw=0;/初始化必须设置为0才能写入数据write _ com(0x 38);/使液晶屏显示光栅,以准备write _ com(0x0c);/初始设置write _ com(0x 06);/初始设置write _ com(0x 01);/0write _ com(0x 80);/使指针指向第一行的第一个单元格Disp_lcd(0x80,LCD _ hang 13 * 16);/显示在第一行Disp_lcd(0xc0,LCD _ hang 14 * 16);/在第二行显示/* * * * * * * * * * * 1602结束LCD函数声明* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Void main()uchar I=0;DA _ S2=0;/使DAC寄存器直DAdata=0;DA _ S1=1;/关闭8位输入寄存器init _ LCD();wave form=0;TMOD=0x01/将计时器0设置为16位操作方式IT0=1;/外部中断设置0沿下降触发ET0=1;/打开计时器中断EX0=1;EA=1;While(1)/DAout(0x ff);/TTL波形可输出/DAout(0x 80);/T _ temp=32;Void timer0() interrupt 1TH0=THtempTL0=TLtempif(wave form=0)sine _ out();else if(wave form=1)triangle _ out();else if(wave form=2)square _ out();Void key_int0() interrupt 0Uchar keytempUint total _ freq/总频率EA=0;TR0=0;/关闭总中断和计时器delay(5);/足够的延迟?-嗯?-嗯?If(key=0) /实际上通过按键中断Keytemp=P30xf0/获取P3端口高度的四位数值交换机(keytemp)选择case0xe 03360/波形Waveformif(wave form 2)wave form=0;Breakcase0xd 03360/频率按指定单位依次递增wave freqwave form;if(wave freqwave form10)wave freqwave form=1;/*这边使用“10”,因为它比“=11”更稳定Break/更高的性,对加数有限制,不继续添加*/case0xb 03360/频率按指定单位依次递减wave

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论