当前位置:首页 > 单片机 > 单片机
[导读]oled.c文件内容如下:#include"oled.h"#include"lpc11xx.h"#include"w25q16.h"//OLED////[0]0123...127//[1]0123...127//[2]0123...127//[3]0123...127uint8_tOLED_GRAM[128][4];constunsignedcharmenu_op[3][16]={{

oled.c文件内容如下:

#include"oled.h"#include"lpc11xx.h"#include"w25q16.h"//OLED////[0]0123...127//[1]0123...127//[2]0123...127//[3]0123...127uint8_tOLED_GRAM[128][4];constunsignedcharmenu_op[3][16]={{0x08,0x08,0x1C,0x1C,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*向上的箭头*/{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x1C,0x1C,0x08,0x08},/*向下的箭头*/{0x08,0x08,0x1C,0x1C,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x1C,0x1C,0x08,0x08},/*双向的箭头*/};voiddelay_ms(uint16_tms){uint16_ti,j;for(i=0;i<5000;i++)for(j=0;jDATA|=(1<<4);//DB7elseLPC_GPIO0->DATA&=~(1<<4);if((dat&0x40)==0x40)LPC_GPIO2->DATA|=(1<<1);//DB6elseLPC_GPIO2->DATA&=~(1<<1);if((dat&0x20)==0x20)LPC_GPIO2->DATA|=(1<<8);//DB5elseLPC_GPIO2->DATA&=~(1<<8);if((dat&0x10)==0x10)LPC_GPIO2->DATA|=(1<<7);//DB4elseLPC_GPIO2->DATA&=~(1<<7);if((dat&0x08)==0x08)LPC_GPIO2->DATA|=(1<<9);//DB3elseLPC_GPIO2->DATA&=~(1<<9);if((dat&0x04)==0x04)LPC_GPIO0->DATA|=(1<<7);//DB2elseLPC_GPIO0->DATA&=~(1<<7);if((dat&0x02)==0x02)LPC_GPIO3->DATA|=(1<<5);//DB1elseLPC_GPIO3->DATA&=~(1<<5);if((dat&0x01)==0x01)LPC_GPIO2->DATA|=(1<<5);//DB0elseLPC_GPIO2->DATA&=~(1<<5);}voidOLED_WR_Byte(uint8_tdat,uint8_tcmd){DATAOUT(dat);if(cmd==1)OLED_DC_H;elseOLED_DC_L;OLED_CS_L;OLED_WR_L;OLED_WR_H;OLED_CS_H;OLED_DC_H;}voidOLED_Clear(void){uint8_ti,n;for(i=0;i<4;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00;OLED_Refresh_Gram();//}voidOLED_Init(void){LPC_GPIO2->DIR|=(1<<4);//OLED_RESETLPC_GPIO2->DATA|=(1<<4);LPC_GPIO1->DIR|=(1<<9);//OLED_CSLPC_GPIO1->DATA|=(1<<9);LPC_GPIO0->DIR|=(1<<3);//OLED_DCLPC_GPIO0->DATA|=(1<<3);LPC_GPIO3->DIR|=(1<<4);//OLED_RDLPC_GPIO3->DATA|=(1<<4);LPC_GPIO0->DIR|=(1<<5);//OLED_WRLPC_GPIO0->DATA|=(1<<5);LPC_GPIO0->DIR|=(1<<4);//DB7LPC_GPIO0->DATA|=(1<<4);LPC_GPIO2->DIR|=(1<<1);//DB6LPC_GPIO2->DATA|=(1<<1);LPC_GPIO2->DIR|=(1<<8);//DB5LPC_GPIO2->DATA|=(1<<8);LPC_GPIO2->DIR|=(1<<7);//DB4LPC_GPIO2->DATA|=(1<<7);LPC_GPIO2->DIR|=(1<<9);//DB3LPC_GPIO2->DATA|=(1<<9);LPC_GPIO0->DIR|=(1<<7);//DB2LPC_GPIO0->DATA|=(1<<7);LPC_GPIO3->DIR|=(1<<5);//DB1LPC_GPIO3->DATA|=(1<<5);LPC_GPIO2->DIR|=(1<<5);//DB0LPC_GPIO2->DATA|=(1<<5);OLED_RST_L;delay_ms(100);OLED_RST_H;OLED_WR_Byte(0xAE,OLED_CMD);//OLED_WR_Byte(0x00,OLED_CMD);//OLED_WR_Byte(0x10,OLED_CMD);//OLED_WR_Byte(0x40,OLED_CMD);//OLED_WR_Byte(0X2E,OLED_CMD);//OLED_WR_Byte(0x81,OLED_CMD);//OLED_WR_Byte(0X32,OLED_CMD);//OLED_WR_Byte(0x82,OLED_CMD);//OLED_WR_Byte(0x80,OLED_CMD);//OLED_WR_Byte(0xA1,OLED_CMD);//OLED_WR_Byte(0xA6,OLED_CMD);//OLED_WR_Byte(0xA8,OLED_CMD);//OLED_WR_Byte(0x3F,OLED_CMD);//OLED_WR_Byte(0xAD,OLED_CMD);//OLED_WR_Byte(0x8E,OLED_CMD);//OLED_WR_Byte(0xC8,OLED_CMD);//OLED_WR_Byte(0xD3,OLED_CMD);//OLED_WR_Byte(0x40,OLED_CMD);//OLED_WR_Byte(0xD5,OLED_CMD);//OLED_WR_Byte(0xf0,OLED_CMD);//OLED_WR_Byte(0xD8,OLED_CMD);//OLED_WR_Byte(0x05,OLED_CMD);//OLED_WR_Byte(0xD9,OLED_CMD);//OLED_WR_Byte(0xF1,OLED_CMD);//OLED_WR_Byte(0xDA,OLED_CMD);//OLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0x91,OLED_CMD);OLED_WR_Byte(0x3F,OLED_CMD);OLED_WR_Byte(0x3F,OLED_CMD);OLED_WR_Byte(0x3F,OLED_CMD);OLED_WR_Byte(0x3F,OLED_CMD);OLED_WR_Byte(0xAF,OLED_CMD);OLED_Clear();}voidOLED_DrawPoint(uint8_tx,uint8_ty,uint8_tt){uint8_tpos,bx,temp=0;if(x>127||y>31)return;//pos=y/8;bx=y%8;temp=1<0XFE||GBKH<0X81)return;GBKH-=0x81;GBKL-=0x40;offset=((uint32_t)192*GBKH+GBKL)*32;//得到字库中的字节偏移量W25Q16_Read(dz_data,offset+0x100,32);return;}/**********************************************//*函数功能:显示16*16点阵中文*//*入口参数:x,y:起点坐标*//**hz:汉字*//*mode:1,正常2,反白*//**********************************************/voidOLED_Show_hz(uint8_tx,uint8_ty,uint8_t*hz,uint8_tmode){uint8_ti,j,temp,xtemp;uint8_tdz_data[32];xtemp=x;Get_GBK_DZK(hz,dz_data);for(i=0;i<32;i++){temp=dz_data[i];for(j=0;j<8;j++){if(temp&0x80)OLED_DrawPoint(x,y,mode);elseOLED_DrawPoint(x,y,!mode);temp<<=1;x++;if(x-xtemp>15){x=xtemp;y++;}}}//OLED_Refresh_Gram();return;}/**********************************************//*函数功能;从W25X16中提取点阵码*//*入口参数:code:ASCII*//*dz_data:存放点阵码的数组*//**********************************************/voidGet_ASCII_DZK(uint8_tcode,uint8_t*buf){uint32_toffset;//点阵偏移量offset=code-0x20;//得到字库中的字节偏移量W25Q16_Read(buf,offset*16+0x0E0000,16);return;}/**********************************************//*函数功能:显示8*16点阵英文字符*//*入口参数:x,y:起点坐标*//*num:字母或符号*//*注意:x,y的取值要在240到320范围内*//**********************************************/voidOLED_ShowChar(uint8_tx,uint8_ty,uint8_tasc,uint8_tmode){uint8_ti,j,temp,xtemp;uint8_tasc_buf[16];xtemp=x;Get_ASCII_DZK(asc,asc_buf);for(i=0;i<16;i++){temp=asc_buf[i];for(j=0;j<8;j++){if(temp&0x80)OLED_DrawPoint(x,y,mode);elseOLED_DrawPoint(x,y,!mode);temp<<=1;x++;if(x-xtemp>7){x=xtemp;y++;}}}//OLED_Refresh_Gram();return;}/*********************************************//*函数功能:显示字符串(中文和英文)*//*入口参数:x,y:坐标*//**p:字符串*//*********************************************/voidOLED_ShowString(uint8_tx,uint8_ty,uint8_t*p,uint8_tmode){while(*p!='')//如果没有结束{if(*p>0x80)//如果是中文{if((*p=='n')||(x>224))//换段和换行{y=y+16;//字体高16x=0;//}OLED_Show_hz(x,y,p,mode);x+=16;p+=2;}else//如果是英文{if((*p=='n')||(x>224))//换段和换行{y=y+16;//字体高16x=0;//}OLED_ShowChar(x,y,*p,mode);x+=8;p++;}}}//opar=0表示画向上的箭头//=1表示画向下的箭头//=2表示画双向的箭头//=3表示清空箭头//hang=0表示在第一行画箭头//=1表示在第二行画箭头voidOLED_SMenuOP(uint8_topra,uint8_thang){uint8_ttemp,i,j;uint8_tx,y;if(hang==0)y=0;elsey=16;x=120;if(opra==3){for(i=0;i<16;i++){for(j=0;j<8;j++){OLED_DrawPoint(x,y,0);temp<<=1;x++;if(x>127){x=120;y++;}}}}else{for(i=0;i<16;i++){temp=menu_op[opra][i];for(j=0;j<8;j++){if(temp&0x80)OLED_DrawPoint(x,y,1);elseOLED_DrawPoint(x,y,0);temp<<=1;x++;if(x>127){x=120;y++;}}}}}/**********************************************//*函数功能;求m的n次方*//**********************************************/uint32_tmypow(uint8_tm,uint8_tn){uint32_tresult=1;while(n--)result*=m;returnresult;}/**********************************************//*函数功能:显示数字*//*入口参数:x,y:起点坐标*//*len:数字的位数*//*num:数值(0~4294967295);*//**********************************************/voidOLED_ShowNum(uint16_tx,uint16_ty,uint32_tnum,uint8_tlen,uint8_tmode){uint8_tt,temp;uint8_tenshow=0;//此变量用来去掉最高位的0for(t=0;t

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,Universal Display Corporation宣布获得了由领先的物联网创新企业京东方科技集团股份有限公司所颁发的“2024年杰出战略伙伴奖”。

关键字: OLED 京东方

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器
关闭
关闭