打印
[STM8]

【STM学习】STM8新手上路——第二天、SPI串口TFT

[复制链接]
3018|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
咳咳,也是为了队形说是第二天,其实学完好久了,当时因为没人回帖就没继续,现在回来啦!虽然从开始学到现在已经有两个多月了,但是我仅仅用了一遍STM8的外设,没有太多深入使用。所以,有什么不对的地方要请大家指正啦,小弟说错话还请见谅哦

步入正题!上回讲解了IAR的基本使用方法与IO口输出。

那么!。。。。我手头正好有一个SPI的串口TFT小液晶,那么我们不如赶紧拿IO模拟一下SPI吧~~~~~~

第一步,建立一个C工程(可以用空工程,个人习惯问题),然后将上次的程序全部复制进main.c  (其他的基本IAR设置参见第一天内容)



这里还要说个事情,就是芯片是时钟设置,因为使用内部高速时钟只用了一个寄存器,所以就不额外开贴了,稍微介绍一下带过。

  可以看到,16M的内部晶振直接输入到HSIDIV(内部高速时钟分频器),我们只需找到它,并作相应设置即可。
我们在这个寄存器中找到

从复位值便可知道,上电默认是8分频,我们现在需要16M时钟,故0分频,将其设置为0即可:CLK->CKDIVR=0x00;

现在可以以这个频率做一个准一些的软件延时,毕竟延时对单片机很重要。(我用逻辑分析仪校准了,在Delay.c)
我们继续模拟SPI;
SPI时序我就不介绍了,网上资料很多,so我直接上代码啦
void Wdata(u8 data)                                     //写入数据
{
        SCE_0;                                                          //TFT片选
        DC_1;                                                           //数据写入
        if (data&(u8)0x80) Data_1;                           //为了让模拟SPI更快,这里没有用for循环
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x40) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x20) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x10) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x08) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x04) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x02) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        if (data&(u8)0x01) Data_1;
        else Data_0;
        CLK_0;
        CLK_1;
        SCE_1;
}


关于TFT,这个要配置的寄存器那真是太多了,这里只讲一个寄存器,有兴趣的可以自己去看看手册 ,寄存器地址为0X36,在手册122页

D7 D6 D5 三位只用于设置显示方向的,D4 设置液晶垂直刷新方向,D3用于颜色数据格式设置
我将其设置为0x36,用了第二种显示显示方向,有特殊需要的可以在初始化以及清行函数中更改(清行需要用另一种方向)。

主程序代码
#include <stm8s.h>
#include <Delay.h>
#include <TFT144.h>
u16 time=0;
int main( void )
{
   CLK->CKDIVR=0x00;   //内部高速时钟0分频
   TFT144_init();
   clear(0);//清屏,黑色
   adxy(60,40);
   Wstr("Success!",GREEN,0);
   ysm(3000);
   adxy(0,0);
   clear(0);//清屏,黑色
   while(1)
   {
       ysm(950);
       adxy(60,55);
       putnum(time++,BLUE,0);
   }



行,来看看运行效果吧





1.44Inc彩屏.zip (167.58 KB)

ILI9163DS_V018_2008-08-15-14-13-43-798.zip (2.31 MB)




沙发
caocai18| | 2015-7-25 08:33 | 只看该作者
不错啊  楼主 我也在学STM8

使用特权

评论回复
板凳
松哥无敌| | 2015-7-25 09:15 | 只看该作者
哈哈哈哈

使用特权

评论回复
地板
仙人球W| | 2015-7-25 09:43 | 只看该作者
可以继续,**好习惯

使用特权

评论回复
5
lwsn| | 2015-7-25 09:45 | 只看该作者
感谢分享,stm8有内部SPI吗

使用特权

评论回复
6
sjw1716094642|  楼主 | 2015-7-25 10:56 | 只看该作者
lwsn 发表于 2015-7-25 09:45
感谢分享,stm8有内部SPI吗

有的,下次会讲,

使用特权

评论回复
7
sjw1716094642|  楼主 | 2015-7-25 10:56 | 只看该作者
单片机的资源我会尽量讲的详细,外置器件我就简略啦

使用特权

评论回复
8
ayl439| | 2015-7-25 17:51 | 只看该作者
赞一个楼主~

使用特权

评论回复
9
sjw1716094642|  楼主 | 2015-7-25 18:39 | 只看该作者

:lol谢谢

使用特权

评论回复
10
搞IT的| | 2015-7-26 17:19 | 只看该作者
谢谢分享,高大上,俺也想来学习下。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎加入微控制家园,讨论微控制技术:群号 258891985

24

主题

302

帖子

8

粉丝