基于单片机的pwm电机控制内容摘要:
*/ void time0(void) interrupt 1 { count++。 if(count==CYCLE) { count=0。 databuf=plus。 plus=0。 if(tt!=2) tt++。 } TH0=0xDC。 TL0=0x00。 //定时 10mS } /* 转速数据处理显示子程序 */ void datamake(unsigned int th) { unsigned char a1,a2。 a1=th/10。 a2=th%10。 ledbuf[0]=ledmap[10]。 ledbuf[1]=ledmap[12]。 ledbuf[2]=ledmap[a1]。 ledbuf[3]=ledmap[a2]。 } /*************************** 定时器中断函数 ****************************/ void time1(void) interrupt 3 //定时器 1中断 { cont++。 if (cont==PWM_ON) { pwm = 1。 } //灯灭 if(cont == CYC) { cont=0。 pwm = 0。 } //灯亮 } /***************************** 按键检测子程序 ***************************/ unsigned char testkey() { P1=0x0f。 return(~P1amp。 0x0f)。 } /***************************** 比较处理函数 ****************************/ void pare(unsigned int th1,unsigned int th2) { if(th1!=th2) { if(th1th2) Flag1=1。 else Flag1=2。 if(Flag1==1) { PWM_ON= PWM_ON+10。 if(PWM_ON 800) { Bee=0。 delay(100)。 Bee=1。 } } if(Flag1==2) //亮度递减 同上,是个 相反的过程 {PWM_ON= PWM_ON5。 if(PWM_ON 45) { Bee=0。 delay(100)。 Bee=1。 } } } } /***************************** 函数功能 :LED显示子程序 *****************************/ void display() { unsigned char i。 unsigned char pos。 unsigned char led。 pos=0xfe。 for(i=0。 i8。 i++) {P2=0xff。 led=ledbuf[i]。 P0=led。 P2=pos。 delay(1)。 pos= _crol_(pos,1)。 } } /**************************** 函数功能 :键盘扫描子程序 ****************************/ void keyscan(void) { unsigned char n。 //扫描第一行 P1=0xfe。 n=P1。 namp。 =0xf0。 if(n!=0xf0) { P1=0xfe。 n=P1。 namp。 =0xf0。 if(n!=0xf0) { switch(n) {case(0xe0):flag=7。 break。 case(0xd0):flag=4。 break。 case(0xb0):flag=1。 break。 case(0x70):flag=0x0a。 break。 } } } //扫描第二行 P1=0xfd。 n=P1。 namp。 =0xf0。 if(n!=0xf0) { P1=0xfd。 n=P1。 namp。 =0xf0。 if(n!=0xf0) {switch(n) {case(0xe0):flag=8。 break。 case(0xd0):flag=5。 break。 case(0xb0):flag=2。 break。 case(0x70):flag=0。 break。 } } } //扫描第三行 P1=0xfb。 n=P1。 namp。 =0xf0。 if(n!=0xf0) { P1=0xfb。 n=P1。 namp。 =0xf0。 if(n!=0xf0) {switch(n) {case(0xe0):flag=9。 break。 case(0xd0):flag=6。 break。 case(0xb0):flag=3。 break。 case(0x70):flag=0x0b。 break。 } } } //扫描第四行 P1=0xf7。 n=P1。 namp。 =0xf0。 if(n!=0xf0) {P1=0xf7。 n=P1。 namp。 =0xf0。 if(n!=0xf0) {switch(n) {case(0xe0):flag=0x0f。 break。 case(0xd0):flag=0x0e。 break。 case(0xb0):flag=0x0d。 break。 case(0x70):flag=0x0c。 break。 } } } } /**************************** A/D转换子程序 *****************************/ void uart_int() { SCON = 0x50。 //设定串行口工作方式 PCON amp。 = 0xef。 //波 特率不倍增 TH2=0xFF。 TL2=0xDC。 RCAP2H = 0xFF。 // 波特率 9600 RCAP2L = 0xDC。 T2CON = 0x34。 // 定时器 1 工作于 8 位自动重载模式 , 用于产生波特率 TR2 = 1。 // 启动定时器 1 } /**************************** 函数功能 :主程序 *****************************/ void main(void) { unsigned char i。 bit conv。 num=0。 pwm=1。 CYCLE=100。 CYC=1000。 //时间周期可以调整 Init_int0()。 Init_Timer()。 uart_int()。 IP=0x01。 //设置 T0 中断为高优先级 EA=1。 //总中断打开 PWM_ON =100。 while(1) { display()。 if(testkey()) { keyscan()。 do{delay(1)。 } while(testkey())。 num++。 } if(flag==0x0a) { num=0。 for(i=0。 i2。 i++) {keybuf[i]=0。 } } if(flag==0x0B) { num=0。 TR1=1。 TR0=1。 //定时器 0开关打开 PWM_ON =100。 flag=0。 } if(flag==0x0C) { num=0。基于单片机的pwm电机控制
相关推荐
图 PWM 调速系统电路图 图的左上方是一个谐振电路,产生一个特定的时钟频率,使 AT89C51 单片机能正常的工作。 晶振片 (CRYSTAL)用于产生时钟频率,该晶振能产生 12MHz 的频率。 两个旁路电容,有频率微调作用,主要是让电路更容易起振,两个电容的值要求一样,至少要非常接近,否则容易造成谐振的不平衡,容易造成停振或者干脆不起振 [6]。 本设计中采用的是 30pf的电容。
气体传感器主要可以 分为金属氧化物半导体式传感器、固体电解质传感器、红外式传感器等,一般的半导体传感器测量时受环境影响较大,输出线性不稳定;电解式气体传感器气体的重复性比较差;红外线吸收散射式气体传感器灵敏度高,可重复性好,响应时间快,考虑到系统的长期稳定性和经济性选择采用红外二氧化碳传感器 6004。 中北大学信息商务学院 2020 届毕业设计 说明 书 8 红外二氧化碳传感器的工作原理
,如果同时亮应关闭信号灯系统,并立即报警。 ( 3)南北红灯维持 25S,在南北红灯亮的同时东西绿灯也亮,并维持 20S,到 20S时,东西绿灯闪亮,闪亮 3S后熄灭,此时,东西黄灯亮并维持 2S后东西黄灯熄灭,东西红灯亮。 同时,南北红灯熄灭,南北绿灯亮。 ( 4)东西红灯亮维持 30S,南北绿灯亮维持 25S,然后闪亮 3S后熄灭,同时南北黄灯亮,维持 2S 后熄灭,这时南北红灯亮
级管,是一种固态的半导体器件,它能够 直接把电能转化为光能。 LED的核心部分由 P 型半导体和 N 型半导体 而组成的 晶片。 在 P 型半导体, 空穴 的数量比自由电子的数量大得多,多数载流子 为 空穴 ,少数载流子是自由电子 ;在 N 型半导体,自由电子的数量比孔学的数量大的多,载体中大多数为自由电子,少数载流子为空 穴。 半导体的它们之间的连接将是一个 “ PN 结 ”。
示方式极大的缩减了发光单元的信号线数量,因此在 LED 显示技术中被广泛使用。 以 88 点阵模块为例,说明一下其使用方法及控制过程。 图 中,红色水平线 Y0、 Y1„„Y7 叫做行线,接内部发光二极管的阳极,每 一行 8 个 LED 的阳极都接在本行的行线上。 相邻两行线间绝缘。 同样,蓝色竖直线 X0、 X1„„X7 叫做列线,接内部每列 8个 LED 的阴极,相邻两列线间绝缘。
{ SBUF=0xff。 while(!TI)。 delayms(10)。 TI=0。 } for(i=0xff。 i0。 i) { SBUF=0x00。 delayms(10)。 while(!TI)。 TI=0。 } ES=1。 flag=0。 } void juchi() //锯齿波 { for(i=0xff。 i0。 i) { SBUF=i。 while(!TI)。 TI=0。 }