标题:
7脚12864spi单片机源程序,直接函数调用
[打印本页]
作者:
jcq000
时间:
2018-4-20 20:46
标题:
7脚12864spi单片机源程序,直接函数调用
7脚12864spi程序,直接函数调用
0.jpg
(24.36 KB, 下载次数: 34)
下载附件
2018-4-20 23:39 上传
单片机源程序如下:
#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<us;i++);
}
/**************毫秒延时************/
void delay_ms(unsigned int ms)
{
unsigned int i,j;
for( i=0;i<ms;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<chang;j++)
{
lcd_wrByte(BMP[adder++],1);
}
}
}
复制代码
所有资料51hei提供下载:
液晶.zip
(2.26 KB, 下载次数: 245)
2018-4-20 20:45 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1