当前位置:首页 > 单片机 > 单片机
[导读]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

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭