完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 changyuan1724 于 2015-9-3 22:08 编辑 好久不见了,小伙伴们,你们好吗? 放假了,而我确实学习的开始,最近事多啊。。。 好了,废话先不说,先来818我今天要展示的小玩意。我已经走到数码管显示了,换句话说我已经会驱动595了,进一步说我会使用spi了,会使用spi预示这什么?就是说我可以驱动所以spi设备了。 话不多说,先看大屏幕: 到了今天,应该不需要再说怎么打开工作环境、怎么挂载、怎么ping了吧? 下来直接说硬件: 跳线其实没得选,因为只有J11C的驱动,所以只能将J11C与com连接起来。 连线应该没啥说的,还是说说吧 红线框定的是所需要连接线。就这么简单。 然后重点是代码,代码里面也可以看出连线方式。 代码如下: /*******系统自带头文件**********/ #include "mainwindow.h" #include "ui_mainwindow.h" /*******需要添加的头文件**********/ #include #include #include #include #include #include #include #include #include #include #include "unistd.h" //延时函数头文件 #include "qtimer.h" //QT定时器头文件 #define on 0 //宏定义,用来设置GPIO电平 #define off 1 int fd_spi,//spi文件ID fd_led, //指示LED文件ID fd_rck, //rck脚ID num[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90},//不用我说,这是字模 weixuan[4] = {0x01,0x02,0x04,0x08},//位选 displaynum = 0,//需要显示的数字 d1 = 0,d2 = 0,d3 = 0,d4 = 0;//各位的数字 unsigned int ttc[] = {0},n = 1; ssize_t ret; spi_ioc_transfer spitt;//spi结构体定义,和STM32库开发相似 long count = 0; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } /***********为start按钮分配的函数****************/ void MainWindow::on_pushButton_clicked()//start spi { QTimer *testTimer = new QTimer(this); fd_spi = open("/dev/spidev1.0", O_RDWR); fd_led = open("/dev/gpio-P3.26",O_WRONLY); fd_rck = open("/dev/gpio-P3.20",O_WRONLY); spitt.bits_per_word = 8; spitt.speed_hz = 100; spitt.tx_buf = (unsigned long)ttc; spitt.rx_buf = 0; spitt.len = 1; spitt.delay_usecs = 1; testTimer->start(0); connect( testTimer, SIGNAL(timeout()), this, SLOT(shumaguan()));//connect to slot } /************自定义类函数,实现GPIO电平设置************/ void MainWindow::setbit(int flag,int num) { char bit[] = {},value[2] = {'0','1'}; bit[0] = value[flag]; ret = write(num,bit,1); } /********用来设置RCK的电平函数**********/ void MainWindow::upvalue(int fd_rck) { setbit(1,fd_rck); setbit(0,fd_rck); } /***************槽函数,在start按钮函数里面已经绑定****************/ void MainWindow::shumaguan() { setbit(on,fd_led); setbit(0,fd_rck); /*************第一位**********************/ ttc[0] = num[d1]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt);//先传数字 ttc[0] = weixuan[0]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt);//再进行位选 upvalue(fd_rck);//RCK更新数据 /*************第二位**********************/ ttc[0] = num[d2]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); ttc[0] = weixuan[1]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); upvalue(fd_rck); /*************第三位**********************/ ttc[0] = num[d3]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); ttc[0] = weixuan[2]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); upvalue(fd_rck); /*************第四位**********************/ ttc[0] = num[d4]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); ttc[0] = weixuan[3]; spitt.tx_buf = (unsigned long)ttc; ret = ioctl(fd_spi,SPI_IOC_MESSAGE(1),&spitt); upvalue(fd_rck); setbit(off,fd_led); } void MainWindow::on_pushButton_4_clicked() { } void MainWindow::on_pushButton_5_clicked() { } void MainWindow::on_pushButton_6_clicked() { } /***********实现主界面数字加10******************/ void MainWindow::on_pushButton_7_clicked() { displaynum = displaynum+10; QString strnum; strnum = QString::number(displaynum,10); ui->label->setText(strnum); if(displaynum>=9999) displaynum = 0; d1 = displaynum/1000; d2 = (displaynum/100)%10; d3 = (displaynum/10)%10; d4 = displaynum%10; } /***********实现主界面数字减10******************/ void MainWindow::on_pushButton_8_clicked() { if(displaynum>=10) displaynum = displaynum-10; QString strnum; strnum = QString::number(displaynum,10); ui->label->setText(strnum); if(displaynum>=9999) displaynum = 0; d1 = displaynum/1000; d2 = (displaynum/100)%10; d3 = (displaynum/10)%10; d4 = displaynum%10; } void MainWindow::on_pushButton_2_clicked() { } void MainWindow::on_pushButton_3_clicked() { } void MainWindow::on_pushButton_9_clicked() { } 洋洋洒洒黏贴了一大堆,看着没感觉有没有? 别急,后面附上源码附件,大家直接用QT打开,编译就能用。 当然前提就是先加载好所需要的驱动,这里只需要加上gpio的驱动就可以了。 实在不知道该说些什么,大家权当热闹看就行了。下面附工程附件,有问题的可以留言。
spi-smg.rar
(68.08 KB, 下载次数: 1
)
好了,今天就到这里,让我们共同学习进步,前往前人未触及只地,去发现新世界,寻找新神奇! 祝论坛越办越红火,大家晚安。 ----愿世界充满幸福!------To BeContinue! 今天是抗日战争胜利70周年,祝祖国繁荣昌盛! |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1908个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36361 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4398 浏览 0 评论
6054 浏览 1 评论
6765 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4214 浏览 0 评论
620浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
615浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
608浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
799浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 00:16 , Processed in 1.176824 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号