历史上的今天

今天是:2024年09月04日(星期三)

正在发生

2020年09月04日 | pic操作lcd 模拟spi 9非标准spi 9位数据位

发布者:Mingyue1314 来源: eefocus关键字:pic操作lcd  模拟spi  非标准spi  9位数据位 手机看文章 扫描二维码
随时随地手机看文章

#include"lcd.h"
#include
#include
#include
#include

//#include"config.h"

#define Delay_1us() asm("nop")
#define Delay_10us() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop")
void Delay_100us()   {  
    Delay_10us(); //1 


Delay_10us(); //2  
Delay_10us(); //3 
Delay_10us(); //4  
Delay_10us(); //5   
Delay_10us(); //6   
Delay_10us(); //7  
Delay_10us(); //8  
Delay_10us(); //9  
Delay_1us(); //6us  
Delay_1us();  
Delay_1us();  
Delay_1us();  
Delay_1us(); 
Delay_1us(); 
  } 


void Delay_ms(unsigned int ms)
{  unsigned int j;
for(j=ms;j>0;j--)  

  Delay_100us(); //1  
  Delay_100us(); //2  
  Delay_100us(); //3  
  Delay_100us(); //4  
  Delay_100us(); //5  
  Delay_100us(); //6  
  Delay_100us(); //7  
  Delay_100us(); //8  
  
  Delay_100us(); //9  
  Delay_10us(); //86us 
  Delay_10us();  
  Delay_10us();  
  Delay_10us();  
  Delay_10us();  


  Delay_10us();   
  Delay_10us();  
  Delay_10us();  
  Delay_1us();   
  Delay_1us();  
  Delay_1us();  
  Delay_1us();  
  Delay_1us();  
  Delay_1us();  
} }

void TimeDelay(unsigned int Timers)
{
unsigned int i;
while(Timers)
{
Timers--;
for(i=0;i<10;i++);
}
}

void SPI_SSSet(unsigned char Status)
{
if(Status)
        {SPI_CS = 1;
      Delay_ms(10);
        // Delay_100us(1);
        }
else  
        {SPI_CS = 0;
   Delay_ms(10);
          //Delay_100us(1);
}
}
void LCD_Init(void)
{
init_spi();
SPI_SCK = 1;

SPI_CS = 1;

Delay_ms(10);
SPI_SCK = 0;
Delay_ms(10);
SPI_SCK = 1;
Delay_ms(10);

}
void init_spi()
{
    
     TRISBbits.TRISB0=0;
     TRISBbits.TRISB1=0;
     TRISBbits.TRISB2=0;  //模拟spi端口
     TRISDbits.TRISD3=0;
   
//     TRISDbits.TRISD0=1;//按键
//     TRISEbits.TRISE7=1;
//     TRISEbits.TRISE6=1;
//     TRISEbits.TRISE5=1;
//     TRISEbits.TRISE4=1;//该5口无模拟输入功能
        
}

void PutChar(unsigned int x,unsigned int y,unsigned char a,unsigned char type) 
{

SPI_SSSet(0);
SPI_Send(ASC_DISPLAY&CMD);
SPI_Send((x>>8)|DAT);
SPI_Send(x|DAT);
SPI_Send((y>>8)|DAT);
SPI_Send(y|DAT);
SPI_Send(type|DAT);
SPI_Send(a|DAT);
       
SPI_SSSet(1);
}


//void PutChars(unsigned int x,unsigned int y,unsigned int a,unsigned char type) 
//{
//
// SPI_SSSet(0);
// SPI_Send(ASC_DISPLAY&CMD);
// SPI_Send((x>>8)|DAT);
// SPI_Send(x|DAT);
// SPI_Send((y>>8)|DAT);
// SPI_Send(y|DAT);
// SPI_Send(type|DAT);
//  SPI_Send((a>>8)|DAT);
// SPI_Send(a|DAT);
// SPI_SSSet(1);
//}
void ShowString(unsigned int x,unsigned int y,unsigned char *p,unsigned char type)
{
    
    unsigned char length=0;
    unsigned char i=0;
    length =strlen(p);
    for (length;length>0;length--)
    {
       // i++;
        SPI_SSSet(0);
SPI_Send(ASC_DISPLAY&CMD);
        switch(type)
        {   case LCD_ASC8_FONT:SPI_Send(((x+(8*i))>>8)|DAT);
                SPI_Send((x+(8*i))|DAT);   break;
            case LCD_ASC12_FONT:SPI_Send(((x+(12*i))>>8)|DAT);
                SPI_Send((x+(12*i))|DAT);   break;
            case LCD_ASC16_FONT:SPI_Send(((x+(16*i))>>8)|DAT);
                SPI_Send((x+(16*i))|DAT);   break;
        
        }
SPI_Send((y>>8)|DAT);
SPI_Send(y|DAT);
SPI_Send(type|DAT);
SPI_Send((p[i])|DAT);
SPI_SSSet(1);
        i++;
     
    }

}

//void PutString(unsigned int x,unsigned int y,unsigned char *p,unsigned char type)
//{
//
// SPI_SSSet(0);
// SPI_Send(ASC_STR_DISPLAY&CMD);
// SPI_Send((x>>8)|DAT);
// SPI_Send(x|DAT);
// SPI_Send((y>>8)|DAT);
// SPI_Send(y|DAT);
// SPI_Send(type|DAT);
//
//        while(*p!=0)
// {
// SPI_Send((*p)|DAT);
// p++;
// }
//        
//        
//
// SPI_SSSet(1);
//}

void PutChar_cn(unsigned int x,unsigned int y,unsigned char * GB,unsigned char type) 
{
//??????×?×???
SPI_SSSet(0);
SPI_Send(HZ_DISPLAY&CMD);
SPI_Send((x>>8)|DAT);
SPI_Send(x|DAT);
SPI_Send((y>>8)|DAT);
SPI_Send(y|DAT);
SPI_Send(type|DAT);
SPI_Send((*(GB++))|DAT);
SPI_Send((*GB)|DAT);
SPI_SSSet(1);
}

//void PutPixel(unsigned int x,unsigned int y)
//{
// //??????×÷
SPI_SSSet(0); //SS????????
SPI_Send(DRAW_POINT&CMD); //??????DRAW_POINT
SPI_Send((x>>8)|DAT); //????????????,???è??????X?á????
SPI_Send(x|DAT);
SPI_Send((y>>8)|DAT); //????Y?á????
SPI_Send(y|DAT);
SPI_SSSet(1); //?ê????×÷??SS??????
//}

//
//void Line(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y)
//{  
// //?????±??
SPI_SSSet(0); //SS????????
SPI_Send(DRAW_LINE&CMD); //??????DRAW_LINE
SPI_Send((s_x>>8)|DAT); //????X?á×?±ê
SPI_Send(s_x|DAT);
SPI_Send((s_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(s_y|DAT);
SPI_Send((e_x>>8)|DAT); //????X?á×?±ê
SPI_Send(e_x|DAT);
SPI_Send((e_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(e_y|DAT);
SPI_SSSet(1); //?ê????×÷??SS??????
//}
//void Circle(unsigned int x,unsigned int y,unsigned int r,unsigned char mode)
//{
SPI_SSSet(0); //SS????????
if(mode)
SPI_Send(DRAW_SOLID_CIRCLE&CMD); //??????DRAW_SOLID_CIRCLE
else
SPI_Send(DRAW_CIRCLE&CMD); //??????DRAW_CIRCLE
SPI_Send((x>>8)|DAT); //????X?á×?±ê
SPI_Send(x|DAT);
SPI_Send((y>>8)|DAT); //????Y?á×?±ê
SPI_Send(y|DAT);
SPI_Send((r>>8)|DAT); //??°???r
SPI_Send(r|DAT);
SPI_SSSet(1); //?ê????×÷??SS??????
//}

void ClrScreen(void)
{
//??????×÷
SPI_SSSet(0); //SS????????
SPI_Send(CLEAR_SCREEN&CMD); //??????CLEAR_SCREEN
        TimeDelay(2);
SPI_SSSet(1); //?ê????×÷??SS??????
}

//void SetBG_Color(unsigned int BGColor)
//{
//
// SPI_SSSet(0); //SS????????
// SPI_Send(SET_BG_COLOR&CMD); //??????SET_BG_COLOR
// SPI_Send((BGColor>>8)|DAT);  //±??°????16bit RGB565
// SPI_Send(BGColor|DAT);
// SPI_SSSet(1); //?ê????×÷??SS??????
//}

//void SetFG_Color(unsigned int FGColor)
//{
// SPI_SSSet(0); //SS????????
// SPI_Send(SET_FG_COLOR&CMD); //??????SET_FG_COLOR
// SPI_Send((FGColor>>8)|DAT); //?°?°????16bit RGB565
// SPI_Send(FGColor|DAT);
// SPI_SSSet(1); //?ê????×÷??SS??????
//}

//void PutBitmap(unsigned int x,unsigned int y,unsigned long p)
//{
//
// SPI_SSSet(0); //SS????????
// SPI_Send(ICON_DISPLAY&CMD); //??????ICON_DISPLAY
// SPI_Send((x>>8)|DAT); //????X?á×?±ê
// SPI_Send(x|DAT);
// SPI_Send((y>>8)|DAT); //????Y?á×?±ê
// SPI_Send(y|DAT);
// SPI_Send(((unsigned int)(p>>24))|DAT); //bmp ??????flash??????DWORD ?à??
// SPI_Send(((unsigned int)(p>>16))|DAT);
// SPI_Send(((unsigned int)(p>>8))|DAT);
// SPI_Send(((unsigned int)p)|DAT);
// SPI_SSSet(1); //?ê????×÷??SS??????
//}
//void delay( unsigned char z)
//{
//   unsigned int x,y;
//        for(x=z;x>0;x--)
//                for(y=880;y>0;y--);
//    
//
//}

void SetBackLight(unsigned char brightness) 
{

SPI_SSSet(0);
SPI_Send(SET_LCD_BRIGHTNESS&CMD);
Delay_1us();//2us
        SPI_Send(brightness|DAT);
        Delay_1us();
SPI_SSSet(1);
}

//
//void Box(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y,unsigned char mode)
//{  
//?????±??
SPI_SSSet(0);
SPI_Send(DRAW_BOX&CMD);
SPI_Send((s_x>>8)|DAT); //????X?á×?±ê
SPI_Send(s_x|DAT);
SPI_Send((s_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(s_y|DAT);
SPI_Send((e_x>>8)|DAT); //????X?á×?±ê
SPI_Send(e_x|DAT);
SPI_Send((e_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(e_y|DAT);
SPI_Send(mode|DAT);
SPI_SSSet(1);
//}

//void Button(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y,unsigned char mode)
//{  
// //?????±??
SPI_SSSet(0); //SS????????
SPI_Send(DRAW_BUTTON&CMD); //??????DRAW_LINE
SPI_Send((s_x>>8)|DAT); //????X?á×?±ê
SPI_Send(s_x|DAT);
SPI_Send((s_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(s_y|DAT);
SPI_Send((e_x>>8)|DAT); //????X?á×?±ê
SPI_Send(e_x|DAT);
SPI_Send((e_y>>8)|DAT); //????Y?á×?±ê
SPI_Send(e_y|DAT);
SPI_Send(mode|DAT);
SPI_SSSet(1);
//}

//void EditASC(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y,unsigned char *p,unsigned char type)
//{  
// unsigned char j;
// SPI_SSSet(0); //SS????????
// SPI_Send(DRAW_EDIT_ASC&CMD); //??????DRAW_LINE
// SPI_Send((s_x>>8)|DAT); //????X?á×?±ê
// SPI_Send(s_x|DAT);
// SPI_Send((s_y>>8)|DAT); //????Y?á×?±ê
// SPI_Send(s_y|DAT);
// SPI_Send((e_x>>8)|DAT); //????X?á×?±ê
// SPI_Send(e_x|DAT);
// SPI_Send((e_y>>8)|DAT); //????Y?á×?±ê
// SPI_Send(e_y|DAT);
// SPI_Send(type|DAT);
// //while(*p!=0)
// for(j=0;j<(type>>4);j++)
// {
// SPI_Send((*p)|DAT); //????????×?????????
// p++;
// }
// SPI_SSSet(1); //?ê????×÷??SS??????
//}

//========================================================================
// ????: void Line(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y)
// ?è??: ??s_x??s_y??????×?±ê??e_x??e_y???á??×?±ê?????????±??
//========================================================================
//void EditCN(unsigned int s_x,unsigned int  s_y,unsigned int  e_x,unsigned int  e_y,unsigned char *p,unsigned char type)
//{  
// unsigned char j;
// //?????±??
// SPI_SSSet(0); //SS????????
// SPI_Send(DRAW_EDIT_HZ&CMD); //??????DRAW_LINE
// SPI_Send((s_x>>8)|DAT); //????X?á×?±ê
// SPI_Send(s_x|DAT);
// SPI_Send((s_y>>8)|DAT); //????Y?á×?±ê
// SPI_Send(s_y|DAT);
// SPI_Send((e_x>>8)|DAT); //????X?á×?±ê
// SPI_Send(e_x|DAT);
// SPI_Send((e_y>>8)|DAT); //????Y?á×?±ê
// SPI_Send(e_y|DAT);
// SPI_Send(type|DAT);
// //while(*p!=0)
// for(j=0;j<(type>>4);j++)
// {
// SPI_Send((*(p++))|DAT);
// SPI_Send((*(p++))|DAT);
// }
// SPI_SSSet(1); //?ê????×÷??SS??????
//}

void SPI_Send(unsigned int dat)                 //数据传输函数(传送带操作)
{

    unsigned char i=0;
for(i=0;i<9;i++)
{
if(dat&0x100)
        {
SPI_SD0 = 1;
                Delay_1us();
            Delay_1us();
            Delay_1us();
        }
else 
{
            SPI_SD0 = 0;
                Delay_1us();
            Delay_1us();
            Delay_1us();
        }
SPI_SCK = 0;
             
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();//----------------------------------多延时是为了50%的占空比
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
                Delay_1us();
            
SPI_SCK = 1;
                
Delay_1us();
dat = dat<<1;
         Delay_1us();
            Delay_1us();
            Delay_1us();

}

}

[1] [1]
关键字:pic操作lcd  模拟spi  非标准spi  9位数据位 引用地址:pic操作lcd 模拟spi 9非标准spi 9位数据位

上一篇:pic 16 使用8563 rtc iic 通讯 内部iic
下一篇:pic 16 操作esp8266

推荐阅读

作者:Imagination Technologies汽车应用总监Bryce Johnstone 在未来20 - 30年中,自动驾驶汽车(AV)将改变我们的驾驶习惯、运输行业并更广泛地影响社会。 我们不仅能够将汽车召唤到我们的家门口并在使用后将其送走,自动驾驶汽车还将挑战个人拥有汽车的想法,并对环境和拥堵产生积极影响。市场调研公司ABI Research预测:到2030年,道路上四分之一...
2、 工作方式方式0:扩展移位寄存器方式,移位速率fosc/12① 以方式0工作时,数据由RXD串行的输入/输出,TXD输出位移脉冲,使外部的移位寄存器移位。② 移位速率,振荡频率的十二分之一。③ 串行口是从低位开始串行输出输入是从地位开始还是高位开始?例:教材*1P132④ 方式0时,SM2必须为0;REN=0禁止接收;方式0与TB8、RB8无关;TI=0;RI=0处于非中...
当前的工程师和技术人员正面临着日益复杂、日益关键的调试任务。新型数字电路给设计人员带来了新的问题:串行总线上的系统集成问题,瞬变,信号畸变,总线争用问题等等,当然也包括产品开发周期的竞争压力,这一切都要求必须迅速准确地完成调试工作。DPO4000 系列提供了杰出的性能、经济性和便携能力,可以迅速简便地迎接这些挑战。这些示波器可以查看电...
当打工人被繁杂的工作压垮,在日复一日的重复性工作后逐渐躺平;企业也在业务流程复杂性和员工生产力中困顿不堪,企业是时候思考如何实现业务流程端到端的自动化,以及组织和员工的协作关系。有远见的企业正在使用自动化与人工智能来增强核心优势,并与员工和客户建立智能高效的协作关系。 根据 IBM 商业价值研究院的一项研究显示,到 2022年,人工...

史海拾趣

问答坊 | AI 解惑

51单片机IO端口操作的一个有趣现象

我想实现P1.1端口跟随P1.4端口同步输出,都是驱动LED,P1.4端口使用定时器定时翻转,主循环程序随时判断P1.4状态,同步驱动P1.1。  开始我是这样写的:   看来没问题,在KEIL仿真运行也没问题,可是下载到89S52中,只见OUT闪烁,LED根本不动, ...…

查看全部问答∨

贡献一些ARM开发板原理图

2440的就不用贡献了,传下S3C2450开发板的原理图 [ 本帖最后由 open82977352 于 2010-1-12 18:43 编辑 ]…

查看全部问答∨

【藏书阁】 集成电路(荒井英甫)——21世纪大学新型参考教材系列

目录: 集成电路a 1 集成电路的学习方法 1·1 集成电路的发明 1·2 集成电路发展的动力 1·3 集成电路的未来 1·4 本书的构成 练习题 引用文献 2 集成电路中的半导体器件 2·1 pn结 2·2 双极型晶体管 2·3 mos晶体管 2·4 集成电路 ...…

查看全部问答∨

现代功率模块及器件应用技术(6).

现代功率模块及器件应用技术(6).…

查看全部问答∨

REMAP、Bootloader、Flashloader

  1、REMAP:    提到REMAP。首先应想到什么是MAP,英语不好,开始就断章取义,MAP就是地图嘛,Memory Map就是存储器地图,不过这个地图的参考坐标不是经纬度,而是地址,进而叫做存储器映射。由于要适应不同存储器容量要求的 ...…

查看全部问答∨

我彻底的无奈了!

大家好:最近做一个GPRS收发短信的实验,接收短信后解析出号码和内容,然后回复给该手机需要的内容, 但是老是出现问题,可以解析出号码和内容,请高手帮忙看一下啊,MC39i的模块。 while( 1 )    {  //发送数据   &n ...…

查看全部问答∨

上海环旭电子综合情况如何?

请问有了解上海环旭电子股份有限公司的具体情况的大侠没?请教下这个公司的工作环境,待遇(本科两年经验),面试的测试课长,谢谢……!…

查看全部问答∨

驱动中怎么让一个程序每隔一段时间执行一次??

比如每隔一分钟执行一次,我是CreateThread,然后再线程中sleep,可感觉有些问题。 应该怎么做,有定时器之类的吗?…

查看全部问答∨

哪里有windows CE 5.0(platform builder 5.0)??

google了好久,都没找到windows CE 5.0下载。 不知道各位谁有这个东西,或者知道哪里有这个下载。 如果谁有的可以传给我就更好了。 请加我 QQ:46231244 谢谢…

查看全部问答∨

求助!!!定时器同步配置问题-一个上升沿信号触发定时器TIM2,同时根据上升沿信号启

最近在做一个RLC(电阻、电感、电容)测量仪,测量插座只有一个,因此需要利用程序区分三种不同的器件; 区分方法是利用通过三种器件后的波形超前滞后关系判别,将正弦信号转化为矩形波后输入定时器通道1。与此同时将没有经过原器件的正弦波也转化为 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved