OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3887|回复: 13

求大神看一看这个程序,主要是通过按键控制步进电机,在oled上显示转速和圈数,key0主要功能是减,key1主要是加,key2主要是....

[复制链接]

8

主题

27

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-12
在线时间
19 小时
发表于 2018-1-10 16:17:40 | 显示全部楼层 |阅读模式
20金钱
求大神看一看这个程序,主要是通过按键控制步进电机,在oled上显示转速和圈数,key0主要功能是减,key1主要是加,key2主要负责key0和key1的转换还有启动电机。想达到的目的就是用按键设置圈数和转速,然后电机按照设置的正转完成后,间隔一段时间后再反转回去然后停止。现在就是正转完成后立刻反转而且还停不下来。求大神看一看给点意见。万分感谢!

按键 步进电机.zip

3.2 MB, 下载次数: 368

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-10 17:05:48 | 显示全部楼层
楼主还是先学习一下UCOS的程序.再来再这个程序可能方法会不一样.
楼主已经被老师带到沟里去了.
回复

使用道具 举报

8

主题

27

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-12
在线时间
19 小时
 楼主| 发表于 2018-1-10 17:12:08 | 显示全部楼层
操作系统 发表于 2018-1-10 17:05
楼主还是先学习一下UCOS的程序.再来再这个程序可能方法会不一样.
楼主已经被老师带到沟里去了.

好的谢谢啊
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-10 17:15:18 | 显示全部楼层
本帖最后由 操作系统 于 2018-1-10 17:18 编辑

大部分老师喜欢用delay_ms();来延时,老师教学时并没有感觉到这里有问题.
当同学们学会了使用delay_ms();后,会到处使用.商业上的程序里面实际并不怎么使用这种延时方法.无意中,同学们已经被老师坑了.如果我是老师.就不教delay_ms();这种延时方法.要用.也只在大循环以前使用.
这一点对初学者来说很重要 .不可忽视.
回复

使用道具 举报

8

主题

27

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-12
在线时间
19 小时
 楼主| 发表于 2018-1-12 09:55:08 | 显示全部楼层
自己帮顶一下
回复

使用道具 举报

8

主题

27

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-12
在线时间
19 小时
 楼主| 发表于 2018-1-16 11:02:31 | 显示全部楼层
求大神给点意见
回复

使用道具 举报

8

主题

27

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-7-12
在线时间
19 小时
 楼主| 发表于 2018-1-17 15:28:32 | 显示全部楼层
求大神帮帮忙
回复

使用道具 举报

7

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2017-4-6
在线时间
67 小时
发表于 2018-1-17 15:50:58 | 显示全部楼层
楼主你有没有单独测试过以下几点:
1. 按键控制加速
2. 按键控制减速
3. 按键控制停止和启动电机功能
4. 按键控制电机反转功能
回复

使用道具 举报

36

主题

227

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3096
金钱
3096
注册时间
2016-4-15
在线时间
350 小时
发表于 2018-1-17 16:12:35 | 显示全部楼层
操作系统 发表于 2018-1-10 17:15
大部分老师喜欢用delay_ms();来延时,老师教学时并没有感觉到这里有问题.
当同学们学会了使用delay_ms(); ...

老铁,那你说说商业上用什么呗
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-17 16:25:37 | 显示全部楼层
liujie136997963 发表于 2018-1-17 16:12
老铁,那你说说商业上用什么呗

当然是使用软件定时器,状态机来完成了呀.有条件可以上OS.
回复

使用道具 举报

13

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2016-4-19
在线时间
139 小时
发表于 2018-1-17 17:30:52 | 显示全部楼层
请问一下,你的GB2312字库是放在外部Flash中的吗?通过什么方式烧录字库的?
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-17 22:46:15 | 显示全部楼层
本帖最后由 操作系统 于 2018-1-17 22:57 编辑
wanghy 发表于 2018-1-17 17:30
请问一下,你的GB2312字库是放在外部Flash中的吗?通过什么方式烧录字库的?


是问我吗?你说的是中文字库吧.
标准的做法,我并不懂呢.
我一般是用多少汉字,就在程序里面做多少个汉字.
我用PCTOLCD 这个软件.转出来的.
我记得前不久在这个论坛回复了一个类似的帖子.里面有部分汉字编码的结构.
可以看一下这个帖子:
http://www.openedv.com/forum.php?mod=viewthread&tid=261634&page=1#pid795775
回复

使用道具 举报

13

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2016-4-19
在线时间
139 小时
发表于 2018-1-18 11:20:07 | 显示全部楼层
操作系统 发表于 2018-1-17 22:46
是问我吗?你说的是中文字库吧.
标准的做法,我并不懂呢.
我一般是用多少汉字,就在程序里面做多少个汉 ...

能不能发一个你做的例程看下,谢谢,657214688@qq.com
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-18 11:52:36 | 显示全部楼层
wanghy 发表于 2018-1-18 11:20
能不能发一个你做的例程看下,谢谢,

例程就不可以发给你了.
老板知道了.我就麻烦了.
再发两个函数给你参考.

us getHz12Pos(uc * a)
{
        ui i = 0;
        ui len;

        len = sizeof(hz12) / sizeof(__myhz12x12);

        for (i = 0; i < len; i++)
        {
                if (hz12.index[0] == a[0] && hz12.index[1] == a[1])
                {
                        return i;
                }
        }

        return 0xffff;
}



void DisStr12x12(uc * str)
{
        ui i,j;
        us pos;
        uc * p;

        pos = getHz12Pos(str);

        if (pos != 0xffff)
        {
                p = (uc *)
                hz12[pos].addr;

                for (i = 0; i < 2; i++)
                {

                        lcdWriteCommand(0xb0 + lp.line + i);
                        lcdWriteCommand(lp.pos & 0x0f);
                        lcdWriteCommand(0x10 | (lp.pos >> 4));

                        for (j = 0; j < 12; j++)
                        {
                         if(lp.line+i == 1)
                          lcdWriteData((*p) |0x80);
                  else
                                lcdWriteData((*p) ^lp.ff);
                                p++;
                        }
                }

        }

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 21:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表