51控制ST7735画正弦函数

主控芯片:STC8A8KS4A12

显示屏参数:1.8寸 128X160像素彩屏 ST7735驱动芯片

一共三个文件:main.C ST7735.C ST7735.H

如图,代码在图片后:

main.C

#include <STC8.H>
#include <math.h>

#include "ST7735.H"

#define PI 3.14159265

xdata unsigned char arr[160];//储存波形数组

unsigned char Magnification;//定义倍率
unsigned char num;//定义函数初始点

//计算正弦函数
unsigned char SinX(unsigned int angle)
{
    //计算公式
    float Result = sin(angle * PI / 180) * 62;

    //将负数上移
    if(Result > 0)
    {
        return Result + 64;
    }
    else
    {
        return Result + 64;
    }
}
//将计算的结果存入数组
void Draw()
{
    unsigned char i;

    for(i = 0; i < 160; i++)
    {
        arr[i] = SinX(i * Magnification + num);
    }
}
//ST7735写入点
void XXX()
{

    unsigned char i, j;

    ST7735_Set_Region(0, 159, 0, 127);

    //这里是横屏,先刷新0-160,然后再128-0
    for(i = 128; i > 0; i--)
    {

        for(j = 0; j < 160; j++)
        {
            if(arr[j] == i)
            {
                ST7735_WriteData16Bit(0x07e0);
            }
            else
            {
                ST7735_WriteData16Bit(0x0000);
            }
        }

    }
}

void main()
{
    P55 = 0;//LED亮
    ST7735_Initial();//ST7735初始化


    while(1)
    {
        P55 = 1;//LED灭
        Draw();//计算并保存到数组
        P55 = 0;//LED亮
        XXX();//画函数到屏幕
        P55 = 1;//LED灭


        //按下P43开启改变正弦函数图像
        while(!P43)
        {
            //这个将函数左移50个单位
            if(P64 == 0)
            {
                while(!P64);

                num -= 50;
            }

            //这个将函数右移50个单位
            if(P65 == 0)
            {
                while(!65);

                num += 50;
            }

            //将函数放大
            if(P66 == 0)
            {
                while(!P66);

                Magnification++;
            }

            //将函数缩小
            if(P67 == 0)
            {
                while(!P67);

                Magnification--;
            }
        }

        P55 = 0;//LED亮
    }
}
ST7735.C

#include "ST7735.H"

void delay_ms(unsigned char time)
{
    unsigned char i, j;

    for(i = 0; i < time; i++)
        for(j = 0; j < 250; j++);
}

//向ST7745发送重置指令
void Reset()
{
    RES = 0;
    delay_ms(100);
    RES = 1;
    delay_ms(100);
}
//SPI总线传输8位数据
void SPI_WriteData(unsigned char Data)
{
    unsigned char i = 0;

    for(i = 0 ; i < 8; i++)
    {
        if(Data & 0X80)
        {
            SDA = 1;
        }
        else
        {
            SDA = 0;
        }

        SCL = 0;
        SCL = 1;
        Data <<= 1;
    }
}
//向ST7735传输8位指令
void ST7735_WriteCmd(unsigned char Data)
{
    CS = 0;
    DC = 0;
    SPI_WriteData(Data);
    CS = 1;
}
//向ST7735传输8位数据
void ST7735_WriteData(unsigned char Data)
{
    CS = 0;
    DC = 1;
    SPI_WriteData(Data);
    CS = 1;
}
//向ST7735传输16位数据
void ST7735_WriteData16Bit(unsigned int Data)
{
    CS = 0;
    DC = 1;
    SPI_WriteData(Data >> 8);
    SPI_WriteData(Data);
    CS = 1;
}
//向ST7735发送初始化指令集
void ST7735_Initial()
{
    Reset();

    ST7735_WriteCmd(0x11);//Sleep EXIT

    //10.2.1 FRMCTR1 (B1h): Frame Rate Control (In normal mode/ Full colors)
    ST7735_WriteCmd(0XB1);
    ST7735_WriteData(0X05);
    ST7735_WriteData(0X3C);
    ST7735_WriteData(0X3C);
    //10.2.2 FRMCTR2 (B2h): Frame Rate Control (In Idle mode/ 8-colors)
    ST7735_WriteCmd(0XB2);
    ST7735_WriteData(0X05);
    ST7735_WriteData(0X3C);
    ST7735_WriteData(0X3C);
    //10.2.3 FRMCTR3 (B3h): Frame Rate Control (In Partial mode/ full colors)
    ST7735_WriteCmd(0XB3);
    ST7735_WriteData(0X05);
    ST7735_WriteData(0X3C);
    ST7735_WriteData(0X3C);
    ST7735_WriteData(0X05);
    ST7735_WriteData(0X3C);
    ST7735_WriteData(0X3C);
    //10.2.4 INVCTR (B4h): Display Inversion Control
    ST7735_WriteCmd(0XB4);
    ST7735_WriteData(0X03);
    //10.2.5 PWCTR1 (C0h): Power Control 1
    ST7735_WriteCmd(0XC0);
    ST7735_WriteData(0X28);
    ST7735_WriteData(0X08);
    ST7735_WriteData(0X04);
    //10.2.6 PWCTR2 (C1h): Power Control 2
    ST7735_WriteCmd(0XC1);
    ST7735_WriteData(0XC0);
    //10.2.7 PWCTR3 (C2h): Power Control 3 (in Normal mode/ Full colors)
    ST7735_WriteCmd(0XC2);
    ST7735_WriteData(0X0D);
    ST7735_WriteData(0X0D);
    //10.2.8 PWCTR4 (C3h): Power Control 4 (in Idle mode/ 8-colors)
    ST7735_WriteCmd(0xC3);
    ST7735_WriteData(0x8D);
    ST7735_WriteData(0x2A);
    //10.2.8 PWCTR4 (C3h): Power Control 4 (in Idle mode/ 8-colors)
    ST7735_WriteCmd(0xC4);
    ST7735_WriteData(0x8D);
    ST7735_WriteData(0xEE);
    //10.2.10 VMCTR1 (C5h): VCOM Control 1
    ST7735_WriteCmd(0xC5);
    ST7735_WriteData(0x18);
    //改变显示方向以及颜色模式
    //10.1.29 MADCTL (36h): Memory Data Access Control
    ST7735_WriteCmd(0x36);
    /*
    *正常竖屏显示COH
    *正常横屏显示A0H
    */
    ST7735_WriteData(0xA0);
    //10.2.17 GMCTRP1 (E0h): Gamma (‘+’polarity) Correction Characteristics Setting
    ST7735_WriteCmd(0xE0);
    ST7735_WriteData(0x04);
    ST7735_WriteData(0x22);
    ST7735_WriteData(0x07);
    ST7735_WriteData(0x0A);
    ST7735_WriteData(0x2E);
    ST7735_WriteData(0x30);
    ST7735_WriteData(0x25);
    ST7735_WriteData(0x2A);
    ST7735_WriteData(0x28);
    ST7735_WriteData(0x26);
    ST7735_WriteData(0x2E);
    ST7735_WriteData(0x3A);
    ST7735_WriteData(0x00);
    ST7735_WriteData(0x01);
    ST7735_WriteData(0x03);
    ST7735_WriteData(0x13);
    //10.2.18 GMCTRN1 (E1h): Gamma ‘-’polarity Correction Characteristics Setting
    ST7735_WriteCmd(0xE1);
    ST7735_WriteData(0x04);
    ST7735_WriteData(0x16);
    ST7735_WriteData(0x06);
    ST7735_WriteData(0x0D);
    ST7735_WriteData(0x2D);
    ST7735_WriteData(0x26);
    ST7735_WriteData(0x23);
    ST7735_WriteData(0x27);
    ST7735_WriteData(0x27);
    ST7735_WriteData(0x25);
    ST7735_WriteData(0x2D);
    ST7735_WriteData(0x3B);
    ST7735_WriteData(0x00);
    ST7735_WriteData(0x01);
    ST7735_WriteData(0x04);
    ST7735_WriteData(0x13);
    /*
    *9.8.2 8-bit Data Bus for 12-bit/Pixel (RGB 4-4-4-bit Input), 4K-Colors, 3AH= “03h”
    *9.8.3 8-bit Data Bus for 16-bit/Pixel (RGB 5-6-5-bit Input), 65K-Colors, 3AH= “05h”
    *9.8.4 8-bit Data Bus for 18-bit/Pixel (RGB 6-6-6-bit Input), 262K-Colors, 3AH= “06h”
    */
    ST7735_WriteCmd(0x3A);
    ST7735_WriteData(0x05);
    //10.1.19 DISPON (29h): Display On
    ST7735_WriteCmd(0x29);

    BLK = 1;
}
//设置ST7735显示范围
void ST7735_Set_Region(unsigned char XStart, unsigned char XEnd, unsigned char YStart, unsigned char YEnd)
{

    //10.1.20 CASET (2Ah): Column Address Set
    ST7735_WriteCmd(0x2A);
    ST7735_WriteData(0x02);
    ST7735_WriteData(XStart);
    ST7735_WriteData(0x02);
    ST7735_WriteData(XEnd);
    //10.1.21 RASET (2Bh): Row Address Set
    ST7735_WriteCmd(0x2B);
    ST7735_WriteData(0x01);
    ST7735_WriteData(YStart);
    ST7735_WriteData(0x01);
    ST7735_WriteData(YEnd);
    //10.1.21 RASET (2Bh): Row Address Set
    ST7735_WriteCmd(0x2C);

}
ST7735.H

#include <STC8.H>

#ifndef __ST7735_H__
#define __ST7735_H__


//端口定义
sbit SCL = P3 ^ 2;
sbit SDA = P3 ^ 3;
sbit RES = P6 ^ 0;
sbit DC  = P6 ^ 1;
sbit CS  = P6 ^ 2;
sbit BLK = P6 ^ 3;
//端口定义-结束

//常用颜色定义
#define RED     0xf800
#define GREEN   0x07e0
#define BLUE    0x001f
#define WHITE   0xffff
#define BLACK   0x0000
//常用颜色定义-结束

//向ST7745发送重置指令
void Reset();
//SPI总线传输8位数据
void SPI_WriteData(unsigned char Data);
//向ST7735传输8位指令
void ST7735_WriteCmd(unsigned char Data);
//向ST7735传输8位数据
void ST7735_WriteData(unsigned char Data);
//向ST7735传输16位数据
void ST7735_WriteData16Bit(unsigned int Data);
//向ST7735发送初始化指令集
void ST7735_Initial();
//设置ST7735显示范围
void ST7735_Set_Region(unsigned char XStart, unsigned char YStart, unsigned char XEnd, unsigned char YEnd);

#endif

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值