×
单片机 > 单片机程序设计 > 详情

7脚12864spi单片机源程序,直接函数调用

发布时间:2020-06-08 发布时间:
|

单片机源程序如下:

#include "yejin.h"


const uchar num[]={

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/


0X00,0X00,0X08,0X08,0X1F,0X00,0X00,0X00,0X00,0X00,0X04,0X04,0XFC,0X04,0X04,0X00,/*"1",1*/


0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/


0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",3*/


0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",4*/


0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/


0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/


0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",7*/


0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/


0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/};

/************微秒延时************/

void delay_us(unsigned long int us)

{

unsigned long int i;


for( i=0;i

}

/**************毫秒延时************/

void delay_ms(unsigned int ms)

{

unsigned int i,j;

for( i=0;i

for(j=0;j<1141;j++); 

}

/*************************************/

void SPI_init(void)

{

  DDRB |= 0xBF;

  SPCR = 0x50; //主机,使能spi,高位先,上升沿起

  SPSR = 0x01; //2倍频

}


//******************端口初始化函数*************

void port_init()

{

DDRB=0Xff;      //SCK、MOSI、SS置位为输出

}

//***************SPI发送************************

void lcd_wrByte(uint data,uint dc)

  if(dc==0) DC_0;

  if(dc==1) DC_1;

  SPDR = data; 

  while ((SPSR & 0x80) == 0); 

}


/*********************OLED 设置坐标*********************/

void lcd_Set_xy(uchar x, uchar y) 

        lcd_wrByte(0xb0+y,0);

        lcd_wrByte(((x&0xf0)>>4)|0x10,0);

        lcd_wrByte((x&0x0f)|0x01,0);

}

/*********************OLED复位************************************/

void lcd_CLS(void)

{

        uchar y,x;

        for(y=0;y<8;y++)

        {

                lcd_wrByte(0xb0+y,0);

                lcd_wrByte(0x01,0);

                lcd_wrByte(0x10,0);

                for(x=0;x<128;x++)

                lcd_wrByte(0,1);

        }

}

/*********************OLED初始化************************************/

void lcd_Init(void)

{        

        RES_0;

        delay_ms(500);//初始化之前的延时

        RES_1;

        lcd_wrByte(0xae,0);//关闭oled面板

        lcd_wrByte(0x00,0);//设置低列地址

        lcd_wrByte(0x10,0);//设置高列地址

        lcd_wrByte(0x40,0);//设置开始行地址设置映射RAM显示开始行(0x00 0x3F)

        lcd_wrByte(0x81,0);//设置对比控制寄存器

        lcd_wrByte(duibidu,0); // 设置输出对比度

        lcd_wrByte(0xa1,0);//设置列映射     0xa0左右反置 0xa1正常

        lcd_wrByte(0xc8,0);//扫描方向   0xc0上下反置 0xc8正常

        lcd_wrByte(0xa6,0);//设置正常显示

        lcd_wrByte(0xa8,0);//设置多种比列(1到64)

        lcd_wrByte(0x3f,0);//1/64 

        lcd_wrByte(0xd3,0);//设置显示补偿(0x00 0x3F)

        lcd_wrByte(0x00,0);//抵消

        lcd_wrByte(0xd5,0);//设置显示时钟分频/振荡器频率

        lcd_wrByte(0x80,0);//设置分割比,设置时钟为100帧/秒

        lcd_wrByte(0xd9,0);//设置pre-charge时期

        lcd_wrByte(0xf1,0);//将预充电设置为15个时钟,放电为1个时钟

        lcd_wrByte(0xda,0);//设置com pin硬件配置

        lcd_wrByte(0x12,0);//

        lcd_wrByte(0xdb,0);//设置vcomh电压

        lcd_wrByte(0x40,0);//取消VCOM等级

        lcd_wrByte(0x20,0);//设置内存寻址模式(0x00/0x01/0x02)

        lcd_wrByte(0x02,0);//页面寻址模式

        lcd_wrByte(0x8d,0);//设置充电泵启用/禁用

        lcd_wrByte(0x14,0);//显示时启用

        lcd_wrByte(0xa4,0);//全部显示开,恢复内存内容显示,输出内存中的内容

        lcd_wrByte(0xa6,0);// 禁用反显示(0xa6/a7) 

        lcd_wrByte(0xaf,0);//打开lcd面板

        lcd_CLS(); //初始清屏

/*****************功能描述:显示16*16点阵  显示的坐标(x,y),y为页范围0~7****************************/

void lcd_16x16(uchar x,uchar y,uchar N,uchar zi[])

{

        uchar wm=0;

        uint adder=32*N;

        lcd_Set_xy(x,y);

        for(wm = 0;wm < 16;wm++)            //上页

        {

                //lcd_wrByte(zi[adder],1);

                adder ++;

        }

        lcd_Set_xy(x,y + 1);

        for(wm = 0;wm < 16;wm++)           //下页

        {

                //lcd_wrByte(zi[adder],1);

                adder ++;

        }                   

}

/*******************功能描述:显示8*16         显示的坐标(x,y),y为页范围0~7,N第几个字****************/

void lcd_8x16(uchar x,uchar y,uchar N)

{

        uchar wm=0;

        uint adder=16*N;

        lcd_Set_xy(x , y);

        for(wm = 0;wm < 8;wm++)            //上页

        {

                lcd_wrByte(num[adder],1);

                adder ++;

        }

        lcd_Set_xy(x,y + 1);

        for(wm = 0;wm < 8;wm++)           //下页

        {

                lcd_wrByte(num[adder],1);

                adder ++;

        }                   

}

/***********功能描述:显示显示BMP图片起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/

void lcd_BMP(uchar x,uchar y,uchar chang,uchar kuan,uchar BMP[])

{

        uchar wm=0,su,hen;

        uint i,j,adder;

        lcd_Set_xy(x,y);

        if(kuan%8==0)  su=kuan/8;

        else su=kuan/8+1; 

        for(i = y;i < su;i++)            

        {

                lcd_Set_xy(x,i);

                for(j=x;j

                {

                 lcd_wrByte(BMP[adder++],1);

                }

        }

                 

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容