完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
出现问题:接通电源,电机只是转动一下然后不动了。还有LCD显示一下就变暗了,改变周围光强亮暗,LCD数值显示没有变化,这是为什么啊?
程序如下: #include "reg52.h" void delay(unsigned int t); //Motor unsigned char get_data; unsigned char temp; unsigned int compare=0; unsigned int dji; unsigned char code tab1[]="welcome on!"; unsigned char code tab2[]="light:"; unsigned char code tab3[]="mcd"; ***it F1 = P1^4; ***it F2 = P1^5; ***it F3 = P1^6; ***it F4 = P1^7; ***it key= P3^2; ***it cs = P3^5; ***it wr = P3^6; ***it rd = P3^7; ***it RS = P3^5; ***it RW = P3^6; ***it E = P3^4; unsigned char code FFW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80}; //正转 unsigned char code FFZ[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}; //反转 unsigned int K; /********************************************************************** * * * 步进电机驱动 * * * ***********************************************************************/ void motor_ffw() { unsigned char i,j; for (j=100*(dji-compare); j>0; j--) //转1*n圈 { for(i=0;i<8;i++) { P1=FFW[i]; delay(1); } } } void motor_ffz() { unsigned char i,j; for (j=100*(compare-dji); j>0; j--) //转1*n圈 { for(i=0;i<8;i++) { P1=FFZ[i]; delay(1); //调速 } } } /****************************************************** * * 延时程序 * ********************************************************/ void delay(unsigned int t) { unsigned int k; while(t--) { for(k=0; k<115; k++) //1ms基准延迟程序 { } } } /*写指令*/ writecom(unsigned char com) { RS=0; RW=0; P0=com; E=0; delay(1); E=1; delay(1); E=0; } /*写数据*/ writedata(unsigned char date) { RS=1; RW=0; P0=date; E=0; delay(1); E=1; delay(1); E=0; } /*写数字*/ void writecount(unsigned int Data) { switch(Data) { case 0: writedata(0x30);break; case 1: writedata(0x31);break; case 2: writedata(0x32);break; case 3: writedata(0x33);break; case 4: writedata(0x34);break; case 5: writedata(0x35);break; case 6: writedata(0x36);break; case 7: writedata(0x37);break; case 8: writedata(0x38);break; case 9: writedata(0x39);break; } } /*------------------------------------------------ ADC0804驱动函数 ------------------------------------------------*/ void AD_init() { cs=1; wr=1; rd=1; } void AD_start() { P1=0xff; cs=0; wr=0; wr=1; cs=1; } unsigned int AD_read() { cs=0; rd=0; delay(1); get_data=P1; rd=1; cs=1; return(get_data); } /*------------------------------------------------ 显示函数 ------------------------------------------------*/ /*显示函数,这里只是控制显示的光强值,显示为4位10进制数,*/ void disp(unsigned int a) { unsigned int c; a*=4; /*将转换所得模拟信号(最大为255)转成10进制数,因为10K光敏电阻对应的光强约为1cd,即1000mcd,为方便显示,故将模拟信号乘以4,估算以作参考*/ writecom(0xc0+7); writecount(a/1000); writecom(0xc0+8); writecount(a%1000/100); writecom(0xc0+9); writecount(a%100/10); writecom(0xc0+10); writecount(a%10); writecom(0xc0+11); for(c=0;c<3;c++) writedata(tab3[c]); } /*------------------------------------------------ 判断函数 ------------------------------------------------*/ pduan(unsigned int a) { unsigned int x; if(a<51) x=0; else if(a<102) x=1; else if(a<153) x=2; else if(a<204) x=3; else x=4; return(x); } /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main() { unsigned int i,j; writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x80+1); for(i=0;i<11;i++) writedata(tab1[i]); writecom(0xc0+1); for(j=0;j<6;j++) writedata(tab2[j]); AD_init(); while(1) { AD_start(); temp=AD_read(); disp(temp); dji=pduan(get_data); if(key) /*判断是否执行暂停状态*/ { if(dji>compare) /*判断步进机为正转还是反转*/ { motor_ffw(); compare=dji; } else if(dji motor_ffz(); compare=dji; } else compare=dji; }; }; }
|
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
685 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1235 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1175 浏览 0 评论
896 浏览 0 评论
944 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11849 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 01:23 , Processed in 0.718332 second(s), Total 72, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号