低平波形发生器程序 冉登喜.docx
- 文档编号:25957441
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:16
- 大小:17.56KB
低平波形发生器程序 冉登喜.docx
《低平波形发生器程序 冉登喜.docx》由会员分享,可在线阅读,更多相关《低平波形发生器程序 冉登喜.docx(16页珍藏版)》请在冰豆网上搜索。
低平波形发生器程序冉登喜
单片机低频信号发生器设计
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineNOP()_nop_()
#define_Nop()_nop_()
#defineAddW0x90//写数据地址
#defineAddR0x91//读数据地址
sbitSCL=P3^6;//I2C时钟
sbitSDA=P3^7;//I2C数据
bitack;/*应答标志位*/
sbitkey1=P2^0;//按键定义
sbitkey2=P2^1;
sbitkey3=P2^2;
sbitP10=P2^4;//位选
sbitP11=P2^5;
sbitP12=P2^6;
sbitP13=P2^7;
sbitP33=P3^3;//发热控制
sbitP32=P3^2;
sbitP34=P3^4;//LED灯的定义
sbitP35=P3^5;
ucharmode=0;
ucharp=50;
ucharA=25;
bitback;
unsignedcharData_Buffer[4]={0,0,0,0};
unsignedintcount=0,count_flag=0;
unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharcodesanjiao[]={0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,
92,96,100,104,108,112,116,120,124,128,124,120,116,112,108,104,100,
96,92,88,84,80,76,72,68,64,60,56,52,48,44,40,36,32,28,24,20,16,12,8,4};
unsignedcharcodesin[]={64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121,
123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118,
117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48,
45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6,
7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60};
unsignedcharcodejuchi[]={0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,
80,84,88,92,96,100,104,108,112,116,120,124,128,124,120};
voiddelay1(uintz)
{
uintx,y;
for(x=z;x>0;x--)
{
for(y=60;y>0;y--)
{
;
}
}
}
/*******************************************************************
起动总线函数
函数原型:
voidStart_I2c();
功能:
启动I2C总线,即发送I2C起始条件.
********************************************************************/
voidStart_I2c()
{
SDA=1;/*发送起始条件的数据信号*/
_Nop();
SCL=1;
_Nop();/*起始条件建立时间大于4.7us,延时*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;/*发送起始信号*/
_Nop();/*起始条件锁定时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;/*钳住I2C总线,准备发送或接收数据*/
_Nop();
_Nop();
}
/*******************************************************************
结束总线函数
函数原型:
voidStop_I2c();
功能:
结束I2C总线,即发送I2C结束条件.
********************************************************************/
voidStop_I2c()
{
SDA=0;/*发送结束条件的数据信号*/
_Nop();/*发送结束条件的时钟信号*/
SCL=1;/*结束条件建立时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;/*发送I2C总线结束信号*/
_Nop();
_Nop();
_Nop();
_Nop();
}
/*******************************************************************
字节数据发送函数
函数原型:
voidSendByte(UCHARc);
功能:
将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
此状态位进行操作.(不应答或非应答都使ack=0)
发送数据正常,ack=1;ack=0表示被控器无应答或损坏。
********************************************************************/
voidSendByte(unsignedcharc)
{
unsignedcharBitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)/*要传送的数据长度为8位*/
{
if((c< elseSDA=0; _Nop(); SCL=1;/*置时钟线为高,通知被控器开始接收数据位*/ _Nop(); _Nop();/*保证时钟高电平周期大于4μs*/ _Nop(); _Nop(); _Nop(); SCL=0; } _Nop(); _Nop(); SDA=1;/*8位发送完后释放数据线,准备接收应答位*/ _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1)ack=0; elseack=1;/*判断是否接收到应答信号*/ SCL=0; _Nop(); _Nop(); } //输入参数dat表示需要转换的da数值,范围0~255 voidWriteDAC(uchardat,ucharnum) { unsignedchari; Start_I2c();//? ? ? ? SendByte(AddW);//? ? ? ? ? ? SendByte(0x40);//? ? ? ? ? ? ? for(i=0;i { SendByte(dat); } Stop_I2c(); } voidmain() { unsignedchari; P33=0; TMOD=0x11;//定时器0初始化 TH0=(65536-3600/p)/256; TL0=(65536-3600/p)%256; TR0=1; ET0=1; TH1=(65536-5000)/256; TL1=(65536-5000)%256; TR1=1; ET1=1; EA=1; while (1) { if(mode==0)//输出三角波 { for(i=0;i<64;i++) { WriteDAC(sanjiao[i]*A/40,p); } } elseif(mode==1)//输出正弦波 { for(i=0;i<128;i++) { WriteDAC(sin[i]*A/40,p); } } elseif(mode==2)//方波 { for(i=0;i<64;i++) { if(i%2==0)WriteDAC(0xff*A/40,p); elseWriteDAC(0,p); } } elseif(mode==3)//输出锯齿波 { for(i=0;i<26;i++) { WriteDAC(1.0*juchi[i]*A/20,p); } } } } voidtimer1()interrupt3 { staticunsignedcharsec=0; staticintmin=00,hour=11; staticunsignedcharm=0; TH1=(65536-5000)/256; TL1=(65536-5000)%256; count++; if(count>200) { count=0; sec++; if(sec>=60) {sec=0; min++; } if(min>=60) { min=0; hour++; } if(hour>=24) { hour=0; } if(P32==0) { m++; if(m>4) m=0; } if(m==0)//控制调节改变量的模式 { P34=1;P35=1; if(key1==0) delay1(20); if(key1==0) {while(key1==1); mode++; if(mode>3) mode=0; } } if(m==1)//切换调节时间 { P34=0;P35=1; if(key2==0) {hour++;if(hour>24)hour=0;} if(key3==0) {hour--;if(hour<0)hour=23;} if(key1==0) delay1(20); if(key1==0) {while(key1==1); mode++; if(mode>3) mode=0; } } if(m==2)//切换调节分钟 { P34=1;P35=0; if(key2==0) min++; if(key3==0) {min--;if(min<0){min=59;hour--;}} if(key1==0) delay1(20); if(key1==0) {while(key1==1); mode++; if(mode>3) mode=0; } } if(m==3)//切换调节占空比(及横向调节) { P34=1;P35=1; if(key1==0) delay1(20); if(key1==0) {while(key1==1); mode++; if(mode>3) mode=0; } if(m==3)//占空比增大 { if(key2==0) {delay1(20); if(key2==0) {while(key2==1); p+=5; if(p>100)p=0; } } } if(m==3)//占空比减小 { P34=1;P35=1; if(key3==0) {delay1(20); if(key3==0) {while(key3==1); p-=5; if(p<=0) p=100; } } } } if(m==4)//切换幅值调节 {P34=0;P35=0; if(key1==0) delay1(20); if(key1==0) {while(key1==1); mode++; if(mode>3) mode=0; } if(m==4)//幅值增大调节 { if(key2==0) { delay1(20); if(key2==0) {while(key2==1); A+=10; } } } if(m==4)//幅值减小调节 { if(key3==0) { delay1(20); if(key3==0) {while(key3==1); A-=10; } } } } if(m==0|m==1|m==2) { Data_Buffer[2]=min/10;//数码管显示时间 Data_Buffer[3]=min%10; Data_Buffer[0]=hour/10; Data_Buffer[1]=hour%10; } if(m==3) { Data_Buffer[2]=p%100/10;//数码管显示频率 Data_Buffer[3]=p%10; Data_Buffer[0]=0; Data_Buffer[1]=p/100; } if(m==4) { Data_Buffer[2]=A%100/10;//数码管显示幅值十 Data_Buffer[3]=A%10;//个 Data_Buffer[0]=0;//千 Data_Buffer[1]=A/100;//百 } } } voidtimer0()interrupt1 { staticunsignedcharBit=0;//静态变量,退出程序后,值保留 TH0=(65536-5000)/256; TL0=(65536-5000)%256; Bit++; if(Bit>=4)Bit=0; P2|=0xf0;//先关位码 P0=Duan[Data_Buffer[Bit]];//开段码 if(Bit==1)P0|=0x80;//先关位码,小数点 switch(Bit)//位扫描送位码 { case0: P10=0;break; case1: P11=0;break; case2: P12=0;break; case3: P13=0;break; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 低平波形发生器程序 冉登喜 低平 波形 发生器 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)