完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` Elecfans论坛高手问答第1期 朱兆琪在线解答单片机C语言编程 本期高手问答(6月30日-7月6日)我们请来了 @zzq宁静致远 为大家解答关于单片机C语言编程方面的问题。 @zzq宁静致远 朱兆琪,我相信大家不陌生。目前深圳市馒头科技有限公司总经理,在论坛连载多个技术贴,从C语言到STM32到蓝牙4.0,引起大家的强烈反响,熟知嵌入式开发。著有《嵌入式Linux开发实用教程》一书,关于朱兆琪,点此了解更多 Elecfans高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。 下面欢迎大家就单片机C语言编程方面问题向 @zzq宁静致远 提问,请直接在回帖中提问。 为了鼓励大家踊跃提问,特准备两本《嵌入式Linux开发实用教程》作为幸运奖品,届时将有 @zzq宁静致远 从所有提问者中抽取赠予此书。 |
|
相关推荐
68个回答
|
|
本帖最后由 jianhong_wu 于 2014-7-8 08:24 编辑
对于函数,凡是带void关键字开头的,都不用return 具体的数值,也可以不用写return。凡是不带void关键字的,为了保持C语言的标准写法,后面都会加一个return 返回某个具体的数值,至于这个数值用不用没关系,把它写出来的目的本来就是当花瓶用的,为了维持C语言结构的对称性,所以不用太纠结这个问题。 评分
|
|||
|
|||
谢谢吴老师 |
|
|
|
来看看。。。。。。。。。。。。。。。。。。。。。。。。。。
|
|
|
|
本帖最后由 qwerrrrr 于 2014-7-10 20:01 编辑
老师你好,我用51单片机和4个十分频芯片(用的是74hc4017),还有一个8选一数据选择器(74hc151),做一个测频计,来测外部信号的频率(方波);我的思路是用一个定时器T1设定1s,然后在1s内用计数器T0测出信号的脉冲个数,然后算出频率,但是那个计数器测的值老是不正确,我不知道程序问题出在哪儿了,所以请老师帮我看看@@zzq宁静致远 #include #include #include #include unsigned int n,num; //0~65535范围 main() { unsigned int k,i=4; float f,m; char buff[30]; init(); P2=0x2c; while(1) { TMOD=0x25; //T1为定时器,工作方式2; T0为计数器 EA=1; ET0=1; ET1=1; TH1=6 ; TL1=6; TH0=0; TL0=0; TR1=1; TR0=1; while(1) { if(num==3686) //11.0592M的晶振,用的方式2,初值TH1=6,TH0=6,所以最后算出来1S为3686次 { TR0=0; n=TH0*256+TL0; TR1=0; num=0; break; } } while(n<=6000) //判断是否分频及计算分频次数 { // P2--; i--; n=n*10; if(i==0) break; } TH1=(65536-45872)/256; TL1=(65536-45872)%256; TL0=0; TL0=0; TR1=1; TR0=1; while(1) { if(num==3686) { n=TH0*256+TL0; TR0=0 ; TR1=0 ; num=0; break; } } k=pow(10,i); // 10的i次方 f=n*k; //最后得到的频率f if(f<1000) sprintf(buff,"f=%5.2fHZ",f); //把f的值打印成一个字符串保存在buff 中 else { m=f/1000.0; sprintf(buff,"f=%5.2fKHZ",m); } lcdprintf(buff); //显示在1602中 } } void T0_time()interrupt 3 { num++; } |
|
1 条评论
|
|
这个是仿真和程序
|
|
|
|
很感谢吴老师这段时间帮大家回答问题,我昨天回到深圳,大家对单片机、C语言等等有什么问题,我们这个帖子继续 |
|
|
|
使用什么语言写并不重要,重要的是掌握步进电机的驱动原理。 1.相序 2.驱动的脉冲 我给你一个我曾经的程序:
|
|
|
|
数组的整合,C程序都放在main函数中进行处理经常出错,分布检验有没有问题,同学告诉我放上标志位分时检测分步处理……只好好像就不出什么大问题了!不明白怎么都放一块就不行了那?
希望老师的经验给出几种可能的情况?还想问一下老师有没有更好的方法处理或者是其他方案,现在的我C很差,编程经常摸不着头脑…… |
|
|
|
谢谢老师的指导,我是初学者,不明白的太多希望得到老师多多指导。再次谢谢。 |
|
|
|
朱总:记得有人说过,读别人写的好程序,对自己学习提高很有帮助。前提要你能读得懂。我把理解的注在您程序的后面,请您给我指正一下。 /************************************************************************ 函数名:Motor2Init 函数功能:电机2驱动初始化 输入参数:无 输出参数:无 *********************************************************************/ void Motor2Init() { /* motor2A_GPIO();//初始化motor2A为GPIO功能 motor2B_GPIO();//初始化motor2B为GPIO功能 motor2C_GPIO();//初始化motor2C为GPIO功能 motor2D_GPIO();//初始化motor2D为GPIO功能 */ motor2A_OUT(); //设置motor2A为输出功能 motor2B_OUT(); //设置motor2B为输出功能 motor2C_OUT(); //设置motor2C为输出功能 motor2D_OUT(); //设置motor2D为输出功能 motor2A_SET(); //设置motor2A输出高电平 motor2B_SET(); //设置motor2B输出高电平 motor2C_SET(); //设置motor2C输出高电平 motor2D_SET(); //设置motor2D输出高电平 } /************************************************************************ 函数名:Motor2Drrive 函数功能:驱动电机2 输入参数:电机的相序__Motordata 输出参数:无 *********************************************************************/ void Motor2Drive(uint8 __Motordata) { if(__Motordata & 0x08) { motor2A_SET();//把A相置1 } else { motor2A_CLR();//A相置0 } if(__Motordata & 0x04) { motor2B_SET(); } else { motor2B_CLR(); } if(__Motordata & 0x02) { motor2C_SET(); } else { motor2C_CLR(); } if(__Motordata & 0x01) { motor2D_SET(); } else { motor2D_CLR(); } } /************************************************************************ 函数名:Motor2Go 函数功能:驱动电机2全速转动 输入参数:转动的方向__MotorDir 输出参数:无 ********************************************************************/ void Motor2Go(uint8 __MotorDir) { if(0 == __MotorDir)//正转? { Motor2Drive(Motor[MotorP - T161IsrCount%MotorP - 1]);//Motor、MotorP、T161IsrCount不知是什么。 } if(1 == __MotorDir)//反转? { Motor2Drive(Motor[T161IsrCount%MotorP]); } } /************************************************************************ 函数名:Motor2Angle 函数功能:驱动电机2转动一定的角度 输入参数:转动的角度__M2Angle( 精确到0.9度) 转动的方向__MotorDir 输出参数:无 ********************************************************************/ void Motor2Angle(uint32 __M2Angle, uint8 __MotorDir) { if(T161IsrCount <= __M2Angle*50*MotorP /360)//如果没有到设定的角度 接着转。 { Motor2Go(__MotorDir); } else //到设定的角度 停转。 { Motor2Stop(); } } /************************************************************************ 函数名:Motor2Circle 函数功能:驱动电机2转动一定的圈数 输入参数:转动的圈数__M2Criclenum 转动的方向__MotorDir 输出参数:无 ********************************************************************/ void Motor2Circle(uint32 __M2Criclenum, uint8 __MotorDir) { Motor2Angle(__M2Criclenum*360, __MotorDir);//(转多少圈,正或反转)。 } /*********************************************************************** 函数名:Motor2Stop 函数功能:使电机停止转动 输入参数:无 输出参数:无 *********************************************************************/ uint8 Motor2Stop(void) { motor2A_SET();//A相置1 motor2B_SET();//B相置1 motor2C_SET();//C相置1 motor2D_SET();//D相置1 TMR16B1TCR = 0X00;// TMR16B1TCR 不知是什么 return 1;//返回1。 } /************************************************************************ 函数名:SetMotor2Speed 函数功能:设置电机2的角速度 输入参数: 电机2的角速度__Motor2Speed 输出参数:无 ********************************************************************/ void SetMotor2Speed(uint32 __Motor2Speed) { if(__Motor2Speed > MotorMaxSpeed) { __Motor2Speed = MotorMaxSpeed;//转速不能超最大转速? } T161IsrCount = 0; //不知 T161IsrCount 。 T161Isr_init(__Motor2Speed*50*MotorP/360);//不知 T161Isr_init。 } |
|
|
|
不错啊~挺有用的~
|
|
|
|
不错啊~挺有用的~
|
|
|
|
不错啊~挺有用的~
|
|
|
|
好东西 回头下了看看
|
|
|
|
谢谢分享~~~~~~~~~~!
|
|
|
|
谢谢老师了
|
|
|
|
yangjiawei1223 发表于 2014-7-1 16:19 因为单片机调试运行指令和处理数据并没有向我们在电脑上编写c程序那么简单明了,我们可以通过返回值来了解程序运行到哪里,个人觉得这个可以用来调试程序。 |
|
|
|
@zzq宁静致远,怎样在单片机上发送一个温度数值,然后在另一台单片机的液晶显示上显示出来?
|
|
|
|
STM8单片机中下面这种定义有什么用呢?好像删了运行也没问题
#if defined(__CSMC__) && defined(USE_PRAGMA_SECTION) #pragma section [CONFIG_RAM] #pragma section @tiny [CONFIG_RAM0] #pragma section (CONFIG_CODE) #pragma section const {CONFIG_CONST} #endif |
|
|
|
非常感谢你的资料 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
524 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
851 浏览 0 评论
2507 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2266 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1708 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5776 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 20:23 , Processed in 0.892145 second(s), Total 100, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号