[经验分享] 【激光报靶器】实现I2C和SPI

tjCFeng   2022-10-7 10:21 楼主

        虽然只是报靶器,但不单单只是用来显示,既有无线通讯,也有人机交互界面。C或C++的界面开发我没做过,什么QT之类的都没用过,好在十几年前一直在使用Delphi开发MIS系统,所以还是抄起老本行用Delphi来开发。Delphi开发图形界面可谓是得心应手,非常方便,只是驱动的开发肯定不如C,那么我的计划是:

    wiringPi实现底层驱动;

    Delphi调用wiringPi的接口实现中断、I2C、SPI等功能;

    Delphi实现图形交互界面。

 

    当然,Delphi已经没了,只能用Lazarus或CodeTyphon来代替,开发起来没什么区别。安装的过程就不再重复了,网上有很多,一搜就能搜到。安装完成后打开IDE,直接显示出窗体,点击运行就可以看到一个带有窗体的程序了。

窗体.png

 不过呢,这次是为了编写I2C和SPI的功能,wiringPi没有提供pascal使用的单元文件,不过Lazarus能够直接调用C/C++编译的lib文件,自己声明一下函数的定义就行了。要保证函数名称的大小写和参数的类型对应。

函数声明.png


底层驱动可以调用,功能的实现就要靠自己了。为了验证I2C和SPI功能,我找了两个OLED来做实验,一个是I2C的,一个是SPI的。
两种OLED的操作方式一样,只是调用了不同的接口,所以父类的 通讯函数都是虚函数,在子类中实现具体的操作。

类.png

顺便在窗体上放上个定时器控件,设定1秒间隔,在事件中显示数字并刷新就可以了。

I2C.jpg I2C+SPI.jpg SPI.jpg

 

回复评论 (1)

wiringPi实现底层驱动;

    Delphi调用wiringPi的接口实现中断、I2C、SPI等功能;

    Delphi实现图形交互界面。

强大!

点赞  2022-10-7 11:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复