单片机三相脉冲触发C程序.doc_第1页
单片机三相脉冲触发C程序.doc_第2页
单片机三相脉冲触发C程序.doc_第3页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

/整个控制过程为先键入所要的控制角,控制角被计算成相应的触发延时时间,/并等待当单片机检测到外部中断信号。当检测到外部中断信号后启动定时器1延时相应的时间,/之后接着启动定时器0并产生发出六脉冲信号经过变换放大触发相应的晶闸管导通,以获得相应的电压#include /#include#include #define uint unsigned int #define uchar unsigned char uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0;uchar temp; uchar num; /键盘返回值 uchar jishu; uchar ge; uchar shi; uchar shijian; float dingshi; uint dingshi_1;sbit dula=P26;sbit wela=P27; /sbit A_1=P26; /sbit B_1=P27; sbit ug_1=P12; /脉冲输出引脚定义 1.2-7sbit ug_2=P13; sbit ug_3=P14; sbit ug_4=P15; sbit ug_5=P16; sbit ug_6=P17; uchar js=0; /六脉冲计数器 void init()/定时器、中断初始化函数 TMOD=0x11; EA=1; ET0=1; ET1=1; TR1=0; TR0=0; IP=0x08; /T1wei gao you xian ji IP=0x09 ?/IPH=0x01; IT0=1; /外中断0为下降沿触发 TCON中设置TH0=(65536-1667)/256;/定时时间,即脉冲宽度 TL0=(65536-1667)%256; void delay(uint z) /1ms延时 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void display(uchar shi, uchar ge)dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(5); uchar Keyboard() P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0) jishu+;temp=P3;switch(temp)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(temp!=0xf0)/松手检测temp=P3;temp=temp&0xf0;P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0) jishu+;temp=P3;switch(temp)case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0) jishu+;temp=P3;switch(temp)case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0; P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0) jishu+;temp=P3;switch(temp)case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0; return num; void main() init(); EX0=1; dula=1;P0=0x3f;dula=0;P0=0xff;wela=1;P0=0xfc;wela=0;delay(5);while(1) Keyboard(); if(jishu=1)/按键一次 shiweishi=num; if(jishu=2) /按键两次 gewei ge=num; jishu=0; shijian=shi*10+ge; dingshi=(shijian+30)/360)*20; /*1000; F=50HZ,工频电源,T=20MS display(shi-1,ge-1); /*从同步电压跳跃点算起经控制角+30的延时,将+30转化为C/T1的时间常数,在同步电压跳跃点开始定时,C/T1溢出时,在中断中置入新的时间常数,其数据对应的定时时间为工频交流电的30脉宽时间,并且启动T0,在T0中断中输出6路脉冲。*/3最后进入的中断 void zhongduan() interrupt 1/定时器t0中断函数 js+; /js为6脉冲计数值,执行完该语句JS=1TH0=(65536-1667)/256; TL0=(65536-1667)%256; if(js=1) ug_6=0; ug_1=0; if(js=2) ug_1=1; ug_2=1; if(js=3) ug_1=0; ug_2=0; if(js=4) ug_2=1; ug_3=1; if(js=5) ug_2=0;ug_3=0; if(js=6) ug_3=1; ug_4=1; if(js=7) ug_3=0; ug_4=0; if(js=8) ug_4=1; ug_5=1; if(js=9) ug_4=0; ug_5=0; if(js=10) ug_5=1; ug_6=1; if(js=11) ug_5=0; ug_6=0; if(js=12) ug_6=1;ug_1=1; js=0; /2 其次进入的中断void T1_dingshi() interrupt 3 TR1=0; TH0=(65536-1667)/256;/脉宽定时时间为脉冲宽度30所对应的时间约1.667MS,其中晶振12MHZ,工频f=50HZTL0=(65536-1667)%256; TR0=1;/启动定时器0 /1首先进入的中断 同步脉冲为矩形脉冲(经变换过的)且为反向(经

温馨提示

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

评论

0/150

提交评论