久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 51單片機(jī)LCD12864任意表情包顯示(附有工程代碼) [打印本頁]

作者: 15262133937    時間: 2020-6-6 17:01
標(biāo)題: 51單片機(jī)LCD12864任意表情包顯示(附有工程代碼)

本工程主要介紹了基于51單片機(jī)的LCD12864的顯示驅(qū)動(字符,數(shù)字,圖片,漢字,表情包),以及介紹完成表情包在LCD12864中顯示的過程
主要借用了兩個工具Image2LCD,和PCtoLCD,其中前者用于對表情包圖片文件進(jìn)行輸出,后者用于取模。
附有如下工程源碼和工程文件。
#include "reg51.h"
#include <intrins.h>
#include "source.h"
//宏定義
#define databyte P1
//位定義
sbit RST=P2^0;    //復(fù)位信號,低電平有效
sbit E=P2^1;  //讀寫使能,高電平有效,下降沿鎖定數(shù)據(jù)
sbit RW=P2^2; //讀寫選擇:1讀,0寫
sbit RS=P2^3 ;//數(shù)據(jù)/指令選擇:1數(shù)據(jù)寫入RAM
sbit CS2=P2^4;    //片選2,低電平有效(后64列)
sbit CS1=P2^5;     //前64列
sbit BF=P1^7;//DB7    忙/不忙

//函數(shù)聲明
void delay_ms(int n);
void LCD_Change();
void LCD_Init();
void LCD_busy();
void LCD_WriteCmd(unsigned char cmd);
void LCD_WriteData(unsigned char dat);
void LCD_Open(unsigned char flag);
void LCD_CS(int flag);
void LCD_Clear();
void LCD_SetPage(unsigned char page);
void LCD_SetLine(unsigned char line);
void LCD_SetRow(unsigned char row);
void LCD_Reset();
void display_hz( int page,int line_local ,int row_locol,unsigned char  s ,unsigned char code *p);
//void set_xy(unsigned char x,unsigned char y);
void display_zf( int page ,int line_local ,int row_locol, unsigned char  s ,unsigned char code *p);
void display_img( unsigned char code *p,bit c);
void display_img_1( unsigned char code *p,bit c) ;
//主函數(shù)
void main()                     
{     
     LCD_Init();
    LCD_Clear();
    while(1)
    {

    display_img(dog2,1);
//    LCD_Change() ;
//    display_img_1(horse,1);
//    LCD_Change() ;
   
    }

    while(1);   
}
void delay_ms( int n)
{   
     int i,j;
     for(i = 0;i<n;i++)
    {
         for(j = 0;j<120;j++);
    }
}
//LCD初始化
void LCD_Init()
{
    LCD_Reset();
    LCD_CS(3);
    LCD_Open(0);
    LCD_SetPage(0);
    LCD_SetLine(0);
    LCD_SetRow(0);
    LCD_Open(1);
}

// 檢測忙
void LCD_busy()   
{
    unsigned char a;
    RW=1;
    RS=0;
    E=1;//讀出忙標(biāo)志(BF)準(zhǔn)備
    while(1)
    {
        E=0;//讀出忙標(biāo)志(BF)就緒
        if(!(databyte&0x80))//讀取忙信號
            break;//不忙跳出
        E=1;
        a++;
        if(a>10)//防止死循環(huán)
            break;
    }

}
//寫命令
void LCD_WriteCmd(unsigned char cmd)
{
    LCD_busy() ;//檢測忙/不忙
    RW=0; //讀寫選擇:0寫
    RS=0; //數(shù)據(jù)/指令選擇:指令
    databyte=cmd ;
    E=1;
    _nop_()    ;
    E=0;  //讀寫使能   
}
//寫數(shù)據(jù)
void LCD_WriteData(unsigned char dat)
{
    LCD_busy() ;//檢測忙/不忙
    RW=0; //讀寫選擇:0寫
    RS=1; //數(shù)據(jù)/指令選擇:數(shù)據(jù)
    databyte=dat ;
    E=1;
    _nop_();   
    E=0;  //讀寫使能
}
//設(shè)置開關(guān)顯示(1開,0關(guān))
void LCD_Open(unsigned char flag)
{
    LCD_busy() ;//檢測忙/不忙
    E=1;
    RW=0;RS=0;
    if(flag)
        databyte=0x3F;
    else
        databyte = 0x3E;
    E=0;
}
//片選信號選通
//0:不選通
//1:選通CS1
//2:選通CS2
//3:同時選通
void LCD_CS(int flag)
{
    switch(flag)
    {
        case 0:    CS1=1;CS2=1;break;
        case 1:    CS1=0;CS2=1;break;
        case 2:    CS1=1;CS2=0;break;
        case 3:    CS1=0;CS2=0;break;
    }
}
//清屏
void LCD_Clear()
{
    int i,j;
    LCD_CS(3)  ;
    for(i=0;i<8;i++)
    {
        LCD_SetPage(i)    ;
        LCD_SetRow(0)  ;
        for(j=0;j<64;j++)
        {
            LCD_WriteData(0);        
        }
    }
}
//設(shè)置頁地址 (P0^1-P0^2      0-7)
void LCD_SetPage(unsigned char page)
{
    page=((page&0x07)|0xB8); //10111xxx
    LCD_WriteCmd(page);
}
//設(shè)置行地址 (P0^1-P0^5      0-63)
void LCD_SetLine(unsigned char line)
{
    line =((line&0x3F)|0xC0);  // 11xxxxxx
    LCD_WriteCmd(line);
}
//設(shè)置列地址 (P0^1-P0^5      0-63)
void LCD_SetRow(unsigned char row)
{
    row =((row&0x3F)|0x40);  // 11xxxxxx
    LCD_WriteCmd(row);
}
//復(fù)位
void LCD_Reset()
{
    RST = 0;
    _nop_();
    RST=1;
    _nop_();
    LCD_Open(1);   
}

//void set_xy(unsigned char x,unsigned char y)//x為行,y為列
//{
//    if(y>=64)//列地址大于等于64時右屏顯示
//    {
//        LCD_CS(1);
//        y=y-64;
//    }
//    else//列地址小于64時左屏顯示
//    {
//        LCD_CS(2);
//    }
//    LCD_WriteCmd(0x40|y);//寫列地址
//    _nop_();
//    //line=x;
//    LCD_WriteCmd(0xb8|x);//寫行地址
//}
//顯示漢字:頁(0,2,4,6),行(0),列(0-64),數(shù)組中第n個,數(shù)組地址
void display_hz( int page ,int line_local ,int row_locol, unsigned char  s ,unsigned char code *p)
{
    int i,j;
    int  x;
    int row,line;
    line = line_local;
    row = row_locol;
    if(row>=64)
    {
        LCD_CS(2);
        row-=64;
        x = 0x20*s;
        LCD_SetPage(page);
         LCD_SetLine(line);
        LCD_SetRow(row);
        for(i=0;i<2;i++)
        {
            for(j=0;j<16;j++)
            {
                LCD_WriteData(p[x]);
                x++;
                row++;
                   LCD_SetRow(row);
            }
            LCD_SetPage(page+1);
            row=row_locol;
        }

    }
    else
    {
        LCD_CS(1);
        x = 0x20*s;
        LCD_SetPage(page);
         LCD_SetLine(line);
        LCD_SetRow(row);
        for(i=0;i<2;i++)
        {
            for(j=0;j<16;j++)
            {
                LCD_WriteData(p[x]);
                x++;
                row++;
                   LCD_SetRow(row);
            }
            LCD_SetPage(page+1);
            row=row_locol;
        }
    }
}

//顯示字符:頁(0,2,4,6),行(0),列(0-64),數(shù)組中第n個,數(shù)組地址
void display_zf( int page ,int line_local ,int row_locol, unsigned char  s ,unsigned char code *p)
{
    int i,j;
    int  x;
    int row,line;
    line = line_local;
    row = row_locol;
    if(row>=64)
    {
        LCD_CS(2);
        row-=64;
        x = 0x10*s;
        LCD_SetPage(page);
         LCD_SetLine(line);
        LCD_SetRow(row);
        for(i=0;i<2;i++)
        {
            for(j=0;j<8;j++)
            {
                LCD_WriteData(p[x]);
                x++;
                row++;
                   LCD_SetRow(row);
            }
            LCD_SetPage(page+1);
            row=row_locol;
        }

    }
    else
    {
        LCD_CS(1);
        x = 0x10*s;
        LCD_SetPage(page);
         LCD_SetLine(line);
        LCD_SetRow(row);
        for(i=0;i<2;i++)
        {
            for(j=0;j<8;j++)
            {
                LCD_WriteData(p[x]);
                x++;
                row++;
                   LCD_SetRow(row);
            }
            LCD_SetPage(page+1);
            row=row_locol;
        }
    }
}
//顯示圖片
void display_img( unsigned char code *p,bit c)
{
    int i,j;
    LCD_CS(1);
    for(j=0;j<8;j++)
    {
        LCD_SetPage(j);
        LCD_SetRow(0) ;
        for(i=0;i<64;i++)
        {   
            if(c)
                LCD_WriteData(p[118*j+i]);
            else
                LCD_WriteData(~p[118*j+i]);
        }
    }
    LCD_CS(2);
    for(j=0;j<8;j++)
    {
        LCD_SetPage(j);
        LCD_SetRow(0) ;
        for(i=64;i<118;i++)
        {   
            if(c)
                LCD_WriteData(p[118*j+i]);
            else
                LCD_WriteData(~p[118*j+i]);
        }
    }
}
void display_img_1( unsigned char code *p,bit c)
{
    int i,j;
    LCD_CS(1);
    for(j=0;j<8;j++)
    {
        LCD_SetPage(j);
        LCD_SetRow(0) ;
        for(i=0;i<64;i++)
        {   
            if(c)
                LCD_WriteData(p[128*j+i]);
            else
                LCD_WriteData(~p[128*j+i]);
        }
    }
    LCD_CS(2);
    for(j=0;j<8;j++)
    {
        LCD_SetPage(j);
        LCD_SetRow(0) ;
        for(i=64;i<128;i++)
        {   
            if(c)
                LCD_WriteData(p[128*j+i]);
            else
                LCD_WriteData(~p[128*j+i]);
        }
    }
}
//LCD切屏
void LCD_Change()
{
    delay_ms(1000);
    LCD_Clear();
    delay_ms(50);               
} LCD12864任意圖片.rar (6.75 MB, 下載次數(shù): 61)









歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产1区2区在线观看 | 欧美日本一区二区 | 欧美黄色片 | 国内精品久久精品 | 在线色| 狠狠热视频 | 国产精品爱久久久久久久 | 91精品国产综合久久婷婷香蕉 | 最新中文字幕一区 | 色一情一乱一伦一区二区三区 | 伊人在线视频 | 欧美精品久久久久久久久久 | 91视频在线 | 日韩一区二区av | 国产在线精品一区二区三区 | 九九热在线视频观看这里只有精品 | 亚洲欧美日韩在线不卡 | 9999精品视频| 国产精品一区二区三区久久 | 亚洲一区二区免费 | 精品久久中文 | 精品综合网 | 国产美女一区二区 | 日本在线网址 | 日韩三区 | 久久精品国产久精国产 | 91久色| 99re在线视频免费观看 | 性色视频| 人人cao | 国产在视频一区二区三区吞精 | 天天宗合网 | 日日综合| 999久久久精品 | 国产精品福利网站 | 久久久国产精品 | av网站在线免费观看 | 手机av网| 久久精品亚洲国产 | 每日在线更新av | 国产区精品视频 |