找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3028|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STC15F單片機(jī)12864源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:146913 發(fā)表于 2016-11-8 21:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<STC15Fxxxx.h>
#define IO_12864  P0
sbit RS_12864 = P2^5;
sbit RW_12864 = P2^6;
sbit E_12864 = P2^7;
sbit RST_12864 = P2^2;
//忙檢測(cè),若忙則等待,最長(zhǎng)等待時(shí)間為60ms
void busychk_12864(void)
{
unsigned int timeout = 0;
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 1;
E_12864 = 1;
while((IO_12864 & 0x80) && ++timeout != 0);  //忙狀態(tài)檢測(cè),等待超時(shí)時(shí)間為60ms
E_12864 = 0;
}

void delay_12864(unsigned int del)
{
unsigned int i;
for(i = 0; i < del; i++){; }
}

//寫(xiě)命令子程序
void wrtcom_12864(unsigned char com)
{
busychk_12864();
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 0;
IO_12864 = com;
E_12864 = 1;
delay_12864(50);    //使能延時(shí)!!!注意這里,如果是較快的CPU應(yīng)該延時(shí)久一些
E_12864 = 0;  
}

//讀數(shù)據(jù)子程序
unsigned char reddat_12864(void)
{
unsigned char temp;
busychk_12864();
E_12864 = 0;
IO_12864 = 0xff;  //IO口置高電平,讀引腳
RS_12864 = 1;
RW_12864 = 1;
E_12864 = 1;
delay_12864(50);    //使能延時(shí)!!!注意這里,如果是較快的CPU應(yīng)該延時(shí)久一些
temp = IO_12864;

return temp;
}

//寫(xiě)數(shù)據(jù)子程序
void wrtdat_12864(unsigned char dat)
{
busychk_12864();
E_12864 = 0;
RS_12864 = 1;
RW_12864 = 0;
E_12864 = 1;
IO_12864 = dat;
delay_12864(50);    //使能延時(shí)!!!注意這里,如果是較快的CPU應(yīng)該延時(shí)久一些
E_12864 = 0;  
}

//初始化12864子函數(shù)
void initial_12864(void)
{
delay_12864(40000);
RST_12864 = 1;
RST_12864 = 0;    //復(fù)位
delay_12864(500);
RST_12864 = 1;
wrtcom_12864(0x30);   //設(shè)置為基本指令集動(dòng)作
delay_12864(100);
wrtcom_12864(0x30);   //設(shè)置為基本指令集動(dòng)作
delay_12864(37);
wrtcom_12864(0x08);   //設(shè)置顯示、光標(biāo)、閃爍全關(guān)。
delay_12864(100);
wrtcom_12864(0x01);   //清屏,并且DDRAM數(shù)據(jù)指針清零
delay_12864(100000);
wrtcom_12864(0x06);   //進(jìn)入模式設(shè)置
wrtcom_12864(0x0c);   //開(kāi)顯示

}


void main()
{
  unsigned char i,*addr;
  unsigned char defchar[] = {0x08,0x10,0x08,0x10,0x08,0x10,0x7F,0xFE,0x20,0x04,0x12,0x48,0x08,0x10,0x05,0xA0,0x02,0x40,0x01,0x80,0x01,0x80,0x07,0xE0,0x09,0x90,0x11,0x88,0x11,0x88,0x11,0x88};    //自定義字符,這里是筆者畫(huà)的一個(gè)小機(jī)器人。
  P0M1 = 0;   P0M0 = 0;  
      P2M1 = 0;   P2M0 = 0;  
  delay_12864(100);      //啟動(dòng)延時(shí)
  initial_12864();       //初始化12864
  addr = defchar;
  wrtcom_12864(0x40+0x20); //寫(xiě)CGRAM首行地址
  for(i = 0; i < 32; i++)
{
    wrtdat_12864(*addr++);   
  }
  wrtcom_12864(0x80);     //在第一行第一個(gè)字符出顯示自定義字符
  wrtdat_12864(0x00);     //寫(xiě)第三個(gè)自定義字符編碼的高字節(jié)
  wrtdat_12864(0x04);     //寫(xiě)第三個(gè)自定義字符編碼的低字節(jié)

  while(1);

}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表