本帖最后由 changyuan1724 于 2015-9-3 22:08 编辑
好久不见了,小伙伴们,你们好吗?
放假了,而我确实学习的开始,最近事多啊。。。
好了,废话先不说,先来818我今天要展示的小玩意。我已经走到数码管显示了,换句话说我已经会驱动595了,进一步说我会使用spi了,会使用spi预示这什么?就是说我可以驱动所以spi设备了。
话不多说,先看大屏幕:
到了今天,应该不需要再说怎么打开工作环境、怎么挂载、怎么ping了吧?
下来直接说硬件:
跳线其实没得选,因为只有J11C的驱动,所以只能将J11C与com连接起来。
连线应该没啥说的,还是说说吧
红线框定的是所需要连接线。就这么简单。
然后重点是代码,代码里面也可以看出连线方式。
代码如下:
/*******系统自带头文件**********/
#include "mainwindow.h"
#include "ui_mainwindow.h"
/*******需要添加的头文件**********/
#include //spi驱动头文件
#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的驱动就可以了。
实在不知道该说些什么,大家权当热闹看就行了。下面附工程附件,有问题的可以留言。
好了,今天就到这里,让我们共同学习进步,前往前人未触及只地,去发现新世界,寻找新神奇!
----愿世界充满幸福!------To BeContinue!
今天是抗日战争胜利70周年,祝祖国繁荣昌盛!