视频教程:https://www.bilibili.com/video/bv1ff411k79x
#include#include #define uchar unsigned char#define uint unsigned int#define lcd1602_datapins p0sbit lcd1602_e=p2^2;sbit lcd1602_rw=p2^1;sbit lcd1602_rs=p2^0;sbit ma_1 = p1^0;sbit ma_2 = p1^1;sbit ma_3 = p1^2;sbit ma_4 = p1^3;sbit mb_1 = p1^4;sbit mb_2 = p1^5;sbit mb_3 = p1^6;sbit mb_4 = p1^7;uchar flag;unsigned char code m_a[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //x反转顺序unsigned char code m_b[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //x正转顺序/******************************************************************************** 函 数 名 : delay* 函数功能 : 延时*******************************************************************************/void ddelay(unsigned int t){ unsigned int k; while(t--) { for(k=0; k0; c--) { for (b=199;b >0;b--) { for(a=1;a >0;a--); } } }/******************************************************************************** 函 数 名 : lcdwritecom* 函数功能 : 向lcd写入一个字节的命令* 输 入 : com* 输 出 : 无*******************************************************************************/void lcdwritecom(uchar com) //写入命令{ lcd1602_e = 0; //使能 lcd1602_rs = 0; //选择发送命令 lcd1602_rw = 0; //选择写入 lcd1602_datapins = com; //放入命令 lcd1602_delay1ms(1); //等待数据稳定 lcd1602_e = 1; //写入时序 lcd1602_delay1ms(5); //保持时间 lcd1602_e = 0;}/******************************************************************************** 函 数 名 : lcdwritedata* 函数功能 : 向lcd写入一个字节的数据* 输 入 : dat* 输 出 : 无*******************************************************************************/ void lcdwritedata(uchar dat) //写入数据{ lcd1602_e = 0; //使能清零 lcd1602_rs = 1; //选择输入数据 lcd1602_rw = 0; //选择写入 lcd1602_datapins = dat; //写入数据 lcd1602_delay1ms(1); lcd1602_e = 1; //写入时序 lcd1602_delay1ms(5); //保持时间 lcd1602_e = 0;}/******************************************************************************** 函 数 名 : lcdinit()* 函数功能 : 初始化lcd屏* 输 入 : 无* 输 出 : 无*******************************************************************************/ void lcdinit() //lcd初始化子程序{ lcdwritecom(0x38); //开显示 lcdwritecom(0x0c); //开显示不显示光标 lcdwritecom(0x06); //写一个指针加1 lcdwritecom(0x01); //清屏 lcdwritecom(0x80); //设置数据指针起点}//按指定位置显示一个字符void displayonechar(unsigned char x, unsigned char y, unsigned char ddata){ y &= 0x1; x &= 0xf; //限制x不能大于15,y不能大于1 if (y) x |= 0x40; //当要显示第二行时地址码+0x40; x |= 0x80; // 算出指令码 lcdwritecom(x); //这里不检测忙信号,发送地址码 lcdwritedata(ddata);}//按指定位置显示一串字符void displaylistchar(unsigned char x, unsigned char y, unsigned char code *ddata){ unsigned char listlength; listlength = 0; y &= 0x1; x &= 0xf; //限制x不能大于15,y不能大于1 while (ddata[listlength] >=0x20) //若到达字串尾则退出 { if (x <= 0xf) //x坐标应小于0xf { displayonechar(x, y, ddata[listlength]); //显示单个字符 listlength++; x++; } }}//unsigned char code m_a[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //x反转顺序//unsigned char code m_b[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //x正转顺序void motor_a1(){ ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 0; ma_4 = 1; ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 1; ma_4 = 1; ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 1; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 1; ma_3 = 1; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 1; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 1; ma_2 = 1; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 1; ma_2 = 0; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 1; ma_2 = 0; ma_3 = 0; ma_4 = 1;}//unsigned char code m_b[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //x正转顺序void motor_a2(){ ddelay(3); ma_1 = 1; ma_2 = 0; ma_3 = 0; ma_4 = 1; ddelay(3); ma_1 = 1; ma_2 = 0; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 1; ma_2 = 1; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 1; ma_3 = 0; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 1; ma_3 = 1; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 1; ma_4 = 0; ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 1; ma_4 = 1; ddelay(3); ma_1 = 0; ma_2 = 0; ma_3 = 0; ma_4 = 1;}void motor_b1(){ ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 0; mb_4 = 1; ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 1; mb_4 = 1; ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 1; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 1; mb_3 = 1; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 1; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 1; mb_2 = 1; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 1; mb_2 = 0; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 1; mb_2 = 0; mb_3 = 0; mb_4 = 1;}void motor_b2(){ ddelay(3); mb_1 = 1; mb_2 = 0; mb_3 = 0; mb_4 = 1; ddelay(3); mb_1 = 1; mb_2 = 0; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 1; mb_2 = 1; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 1; mb_3 = 0; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 1; mb_3 = 1; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 1; mb_4 = 0; ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 1; mb_4 = 1; ddelay(3); mb_1 = 0; mb_2 = 0; mb_3 = 0; mb_4 = 1;}void m_con(uchar id,uchar dir,uint step){ uchar i; if(id == 0) { if(dir == 0) { for(i=0;i< step;i++) { motor_a1(); } }else if(dir == 1) { for(i=0;i< step;i++) { motor_a2(); } } } if(id == 1) { if(dir == 0) { for(i=0;i< step;i++) { motor_b1(); } }else if(dir == 1) { for(i=0;i=step2) { num = step1 - step2; for(i=0;i< step2;i++) { if(dir1 == 0){motor_a1();}else{motor_a2();} if(dir2 == 0){motor_b1();}else{motor_b2();} } for(i=0;i< num;i++) { if(dir2 == 0){motor_b1();}else{motor_b2();} } } if(step1< step2) { num = step2 - step1; for(i=0;i< step1;i++) { if(dir1 == 0){motor_a1();}else{motor_a2();} if(dir2 == 0){motor_b1();}else{motor_b2();} } for(i=0;i< num;i++) { if(dir1 == 0){motor_a1();}else{motor_a2();} } } }double sin_ans;double arc_sin;uint get_h;uint get_l;uchar show;void main(){ lcdinit(); displaylistchar(2,0,step motor); mm_con(1,0,(uint)(15/2*5),(uint)(18/2*5)); while(1) { } }
iPad mini5曝光:网速上前无古人,后无来者!力压联想华硕?
国产电感厂家揭秘插件插件共模电感的好坏怎么判断gujing
人工智能帮企业争取专业人才
光伏发电原理和光伏电池片技术详解
DLP大屏幕电视墙的原理及调试方法
Proteus教程:步进电机
施密特触发器型双稳态电路
BB2022L富奥星微波雷达感应模块
路透:以保护敏感信息 日本可能禁止用中国无人机
图像传感器在包装盒内物体检测的解决方案应用
一次性保险丝与自恢复保险丝这两种之间有什么差别?
AR眼镜的时代即将到来了吗
什么是区块链INFLEUM平台
基于芯海科技CUB3141的拓展坞应用案例
毫米波雷达为何成为2023年科技圈里热门
高可靠、高性价比全自动口罩机电气系统的解决方案
如何挑选合适的校园物联网设备厂家?
基于物理实机部署的华为智能呼叫中心
hdmi光纤线原理/组成/优点
地平线发起的《辅助驾驶前向视觉感知性能测评方法及要求》立项