熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-6-20 21:40
正文摘要:求助stc89c52+ds1302+ds18B20+12864液晶屏 萬年歷(帶三路鬧鐘) 源 碼、原理圖 開發(fā)板原理圖已發(fā)附件 可以做可以私信 商量提升獎(jiǎng)勵(lì) |
/*--------------------------------------------------------------------------- 這個(gè)是main函數(shù)屏蔽的都可以用 電子智能時(shí)鐘程序 單 片 機(jī):STC89C52RC 晶 振:12MHz 時(shí)鐘芯片:DS12887 液 晶 屏:LCM-12864-ST7920 時(shí) 間:2010年3月28日 LCM12864使用并口連接方式,PSB、RST接高電平 頭文件----------------------------------------------------------------------*/ #include <reg52.h> #include <intrins.h> #include "LCD12864.h" #include "DS12CR887.h" #include "DS18B20.h" #include "nongli.h" #include "displaytime.h" #define uint unsigned int #define uchar unsigned char /*--------------------定義按鍵-----------------------------------------------*/ //sbit K1 = P2^7; //K1-設(shè)置 //sbit K2 = P2^6; //K2-確認(rèn)、返回 //sbit K3 = P2^5; //K3-加 //sbit K4 = P2^4; //K4-減 // //void DelayM(uint); // ///*定義變量-------------------------------------------------------------------*/ //bit q=0, w=0; //調(diào)時(shí)標(biāo)志位 // ///*延時(shí)函數(shù) 1MS/次------------------------------------------------------------*/ //void DelayM(uint a) //{ // uchar i; // while( --a != 0) { for(i = 0; i < 125; i++); } //} ///*日期、時(shí)間設(shè)置函數(shù)---------------------------------------------------------*/ //void Set_time(uchar sel) //{ // signed char address,item; // signed char max,min; // unsigned char yy,mo,moontemp1,moontemp2; // ds_write(0x0a,0x00); //進(jìn)入調(diào)時(shí),關(guān)閉時(shí)鐘振蕩器 // write_com(0x30); write_com(0x06); // write_com(0x98); lcm_w_word("設(shè)置"); // if(sel==5) {lcm_w_word("秒鐘");address=0; max=59;min=0;} //秒鐘0 // if(sel==4) {lcm_w_word("分鐘");address=2; max=59;min=0;} //分鐘2 // if(sel==3) {lcm_w_word("小時(shí)");address=4; max=23;min=0;} //小時(shí)4 // if(sel==2) {lcm_w_word("日期"); //日期修改為按月份實(shí)際天數(shù)調(diào)整 // address=7; //日期7 // mo = ds_read(0x08);//讀月 // moontemp1=mo/16; // moontemp2=mo%16; // mo=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制月份數(shù)據(jù) // // yy = ds_read(0x09);//讀年 // moontemp1=yy/16; // moontemp2=yy%16; // yy=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制年份數(shù)據(jù) // // if(mo==2&&yy%4!=0){max=28;min=1;}//平年2月28天 // if(mo==2&&yy%4==0){max=29;min=1;}//閏年2月29天 // if(mo==1||mo==3||mo==5||mo==7||mo==8||mo==10||mo==12){max=31;min=1;}//每月31天的月份 // if(mo==4||mo==6||mo==9||mo==11){max=30;min=1;} //每月30天的月份 // } // if(sel==1) {lcm_w_word("月份");address=8; max=12;min=1;} //月份8 // if(sel==0) {lcm_w_word("年份");address=9; max=99;min=0;} //年份9 // item=ds_read(address); //讀取DS12CR887某地址上的數(shù)值賦給item // if(K3 == 0) {item++;} //K3-加數(shù):1 // if(K4 == 0) {item--;} //K4-減數(shù):1 // if(item>max) item=min; //限制數(shù)值最大有效范圍 // if(item<min) item=max; //限制數(shù)值最小有效范圍 // ds_write(address,item); //將調(diào)整好的item值寫入DS12CR887 // displaydate(); //顯示日期 // displaytime(); //顯示時(shí)間 // displaynl(); //顯示農(nóng)歷 // displayxq(); //顯示星期 //} /*主函數(shù)---------------------------------------------------------------------*/ void main() { // uchar e=0; // K1=1;K2=1;K3=1;K4=1; // ds_int(); //時(shí)鐘芯片初始化 lcm_init(); //液晶初始化 //調(diào)用歡迎信息 // DelayM(2000); //延時(shí) // lcm_clr(); //清屏 // Clean_12864_GDRAM(); //清屏 // ds_write(0,30); //miao // ds_write(2,59); //fen // ds_write(4,12); //shi while(1) { welcome(); // if (w == 0) //正常走時(shí) // { // displaydate(); //顯示日期 // displaynl(); //顯示農(nóng)歷 // displaytime(); //顯示時(shí)間 // displayxq(); // } // else {} //否則啟動(dòng)調(diào)時(shí) // ///*----------------------------設(shè)置時(shí)間--------------------------------------*/ // if (K1 == 0) // { // DelayM(20); //按鍵消抖 // if(K1 == 0 && w == 1) //當(dāng)是調(diào)時(shí)狀態(tài) 本鍵用于調(diào)整下一項(xiàng) // { // e++; //選擇調(diào)節(jié)的對(duì)象 // if (e >= 7 ) {e = 0;} // while(! K1 ); //等待鍵松開 // Set_time(e); //調(diào)整 // } // if(K1 == 0 && w == 0) //當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài) // { // lcm_clr(); // Clean_12864_GDRAM(); //清屏 // w=1; //進(jìn)入調(diào)時(shí) // Set_time(e); // } // while(K1 == 0); //等待鍵松開 // } ///*--------------------------------------------------------------------------*/ // if (K2 == 0) // 當(dāng)在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí) // { // DelayM(20); // if(K2 == 0 && w == 1) // { // w = 0; //退出調(diào)時(shí) // e = 0; //"下一項(xiàng)"計(jì)數(shù)器清0 // } // if(K2 == 0 && w == 0) // { // lcm_clr(); Clean_12864_GDRAM(); // write_com(0x30); write_com(0x06); // welcome(); // while(K2 == 0); // } // lcm_clr(); Clean_12864_GDRAM(); // ds_write(0x0a,0x20); //調(diào)時(shí)完畢,開啟時(shí)鐘振蕩器 // displaydate(); // displaynl(); // displaytime(); // ds1820disp(); // while(K2 == 0); // } ///*加調(diào)整--------------------------------------------------------------------*/ // if (K3 == 0 && w == 1) // { // DelayM(20); // if(K3 == 0 && w == 1) { Set_time(e); } // while(! K3 ); // } ///*減調(diào)整--------------------------------------------------------------------*/ // if (K4 == 0 && w == 1) // { // DelayM(20); // if(K4 == 0 && w == 1) { Set_time(e); } // while(! K4 ); // } } } /*結(jié)束--------------------------------------------------- #ifndef __LCD12864_H__ #define __LCD12864_H__ #define uchar unsigned char #define uint unsigned int /*定義12864液晶屏數(shù)據(jù)線--------------------------------------------------------------*/ sbit LCM_RS = P2^7; //模式位,為0輸入指令,為1輸入數(shù)據(jù) sbit LCM_RW = P2^6; //讀寫位,為0讀,為1寫 sbit LCM_EN = P2^5; //使能位,高脈沖 sbit LCM_PSB = P2^4; #define Lcd_Bus P0 //LCM12864數(shù)據(jù)總線,P0.0--P0.7對(duì)應(yīng)連接DB0--DB7 /*液晶數(shù)字符號(hào)圖片,寬度x高度=16x32---------------------------------------------------*/ //PCtoLCD2002取模:順向,逐行式 uchar code num1632[11][64]={ {//圖片數(shù)字0 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x78,0x3E,0x78,0x3E,0x78,0x5E,0x78,0x5E,0x78,0x9E,0x78,0x9E, 0x79,0x1E,0x79,0x1E,0x7A,0x1E,0x7A,0x1E,0x7C,0x1E,0x7C,0x1E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00,}, {//圖片數(shù)字1 0x00,0x00,0x00,0x38,0x00,0x78,0x00,0xF8,0x01,0xF8,0x01,0xF8,0x00,0x78,0x00,0x78, 0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78, 0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78, 0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x78,0x00,0x00}, {//圖片數(shù)字2 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x3E,0x00,0x7E,0x00,0xFC,0x01,0xF8, 0x03,0xF0,0x07,0xE0,0x0F,0xC0,0x1F,0x80,0x3F,0x00,0x7E,0x00,0x7C,0x00,0x78,0x00, 0x78,0x00,0x78,0x00,0x78,0x1E,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x00,0x00}, {//圖片數(shù)字3 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x78,0x1E,0x00,0x1E,0x00,0x1E,0x00,0x3E,0x0F,0xFC,0x0F,0xF8, 0x0F,0xF8,0x0F,0xFC,0x00,0x3E,0x00,0x1E,0x00,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00}, {//圖片數(shù)字4 0x00,0x00,0x00,0x1C,0x00,0x3C,0x00,0x7C,0x00,0x7C,0x00,0xFC,0x01,0xFC,0x01,0xFC, 0x03,0xFC,0x07,0xBC,0x07,0xBC,0x0F,0x3C,0x0F,0x3C,0x1E,0x3C,0x1E,0x3C,0x3C,0x3C, 0x3C,0x3C,0x78,0x3C,0x78,0x3C,0x78,0x3C,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE, 0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x00}, //圖片數(shù)字5 0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x78,0x00,0x78,0x00,0x78,0x00, 0x78,0x00,0x78,0x00,0x7B,0xF0,0x7F,0xF8,0x7F,0xFC,0x7F,0xFE,0x7E,0x3E,0x7C,0x1E, 0x7C,0x1E,0x00,0x1E,0x00,0x1E,0x00,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00, {//圖片數(shù)字6 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x00,0x78,0x00,0x78,0x00,0x7B,0xF0,0x7F,0xF8,0x7F,0xFC,0x7F,0xFE, 0x7C,0x3E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00}, {//圖片數(shù)字7 0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x78,0x1E,0x00,0x1E,0x00,0x3C, 0x00,0x3C,0x00,0x78,0x00,0x78,0x00,0xF0,0x00,0xF0,0x01,0xE0,0x01,0xE0,0x03,0xC0, 0x03,0xC0,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80, 0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x07,0x80,0x00,0x00}, {//圖片數(shù)字8 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x3F,0xFC,0x1F,0xF8,0x1F,0xF8, 0x3F,0xFC,0x7C,0x3E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00}, {//圖片數(shù)字9 0x00,0x00,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7C,0x3E,0x78,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x7C,0x3E, 0x7F,0xFE,0x3F,0xFE,0x1F,0xFE,0x0F,0xDE,0x00,0x1E,0x00,0x1E,0x00,0x1E,0x78,0x1E, 0x78,0x1E,0x78,0x1E,0x7C,0x3E,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x00,0x00}, {// 圖片":" 10 //6X6方點(diǎn) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0, 0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0, 0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, }; uchar code bmp1616[4][32]={ {0x00,0x00,0x00,0x00,0x3C,0x3C,0x2F,0xF4,0x3D,0x3C,0x39,0x1C,0x11,0x48,0x11,0x88, 0x11,0x08,0x10,0x08,0x18,0x18,0x0C,0x30,0x1F,0xF8,0x18,0x18,0x00,0x00,0x00,0x00,}, {0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x42,0x04,0x82,0x08,0x05,0x00,0x05,0x08, 0x08,0x90,0x18,0xA0,0x28,0x40,0x48,0x20,0x88,0x10,0x0A,0x08,0x0C,0x06,0x08,0x00}, {0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x80,0x2F,0xFC,0x20,0x84, 0x20,0x84,0x21,0x04,0x21,0x04,0x22,0x04,0x22,0x04,0x44,0x04,0x48,0x28,0x90,0x10}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00}, }; /*12864液晶顯示屏并口驅(qū)動(dòng)程序--------------------------------------------------------*/ //檢查忙位 void chk_busy() { LCM_RS=0; LCM_RW=1; LCM_EN=1; Lcd_Bus=0xff; while((Lcd_Bus&0x80)==0x80); LCM_EN=0; } /*寫指令到LCD------------------------------------------------------------------------*/ void write_com(uchar cmdcode) { chk_busy(); LCM_RS=0; LCM_RW=0; LCM_EN=1; Lcd_Bus=cmdcode; LCM_EN=0; } /*寫數(shù)據(jù)到LCD------------------------------------------------------------------------*/ void write_data(uchar Dispdata) { chk_busy(); LCM_RS=1; LCM_RW=0; LCM_EN=1; Lcd_Bus=Dispdata; LCM_EN=0; } /*向LCM發(fā)送一個(gè)字符串,長度64字符之內(nèi)-------------------------------------------------*/ void lcm_w_word(uchar *s) { while(*s>0) { write_data(*s); s++; } //應(yīng)用:lcm_w_word("您好!"); } /******************************************************************************/ void lcm_w_test(bit i,unsigned char word) //寫指令或數(shù)據(jù)(被調(diào)用層) { if(i == 0) //寫指令(0,指令) { write_com(word); } else //寫數(shù)據(jù)(1,數(shù)據(jù)) { write_data(word); } } /*清屏函數(shù)--------------------------------------------------------------------------*/ void lcm_clr(void) { lcm_w_test(0,0x01); //寫命令 } /******************************************************************************/ void lcm_clr2(void) //清屏上面3行(用空格填滿要清顯示的地方,因?yàn)橐壕潦庆o態(tài)顯示的,所以這辦法常用) { lcm_w_test(0,0x80);//第一行 lcm_w_word(" "); //標(biāo)尺("1234567812345678"應(yīng)該能夠顯示滿一行) lcm_w_test(0,0x90);//第二行 lcm_w_word(" "); //標(biāo)尺("1234567812345678"應(yīng)該能夠顯示滿一行) lcm_w_test(0,0x88);//第一行 lcm_w_word(" "); //標(biāo)尺("1234567812345678"應(yīng)該能夠顯示滿一行) } /*初始化LCD屏------------------------------------------------------------------------*/ void lcm_init() { LCM_PSB=1; write_com(0x30); //選擇8bit數(shù)據(jù)流 write_com(0x0c); //開顯示(無游標(biāo)、不反白) lcm_clr(); //清除顯示,并且設(shè)定地址DDRAM指針為00H // write_com(0x01); //清除顯示,并且設(shè)定地址指針為00H lcm_clr2(); } /*使用繪圖的方法讓一個(gè)16*16的漢字符反白----------------------------------------------*/ //形式參數(shù):uchar x,uchar y,uchar wide,uchar bkcor //行參說明:坐標(biāo)水平位置,坐標(biāo)垂直位置,反白行數(shù),要反白還是清除(1:反白,0:清除) void write1616GDRAM(uchar x,uchar y,uchar sign,uchar *bmp) { uchar i,j,basex; write_com(0x36); //擴(kuò)展指令,繪圖模式命令,開顯示也可以繪.(關(guān)圖片顯示0x34) if(y==1||y==2) //第一第二行 { basex=0x80; //上半屏 y=(y-1)*16; //垂直位址從0X80開始. } if(y==3||y==4) //第三第四行 { basex=0x88; //下半屏 y=(y-3)*16; //垂直位址都是從0X80開始的,不管上下半屏。 } for(i=0;i<16;i++) // { write_com(0x80+y+i); //寫入垂直位址。 write_com(basex+x-1); //再寫入水平位址(上半屏第一字為0X80,……第七字為0X87) //下半屏第一字為0X88,……第七字為0X8F; for(j=0;j<2;j++) //再寫入兩個(gè)8位元的數(shù)據(jù),AC會(huì)自動(dòng)增一,接著寫數(shù)據(jù) { if(sign==1) write_data(~(*bmp++)); else write_data(*bmp++); } } write_com(0x36); //寫完數(shù)據(jù),開圖片顯示 } /************************************************************************************** //函數(shù)功能:顯示16X16圖形,適用于st7920型液晶 //形式參數(shù):uchar x,uchar y,uchar *bmp //行參說明:橫坐標(biāo)X列,縱坐標(biāo)Y行,sign=1反白、=0不反,tt是要顯示的圖形bmp1616中的第幾個(gè) //************************************************************************************/ void set1616pic(uchar x,uchar y,uchar sign,uchar tt) { uchar (*pp)[32]; //定義指針 pp=bmp1616; //二維數(shù)組首地址給指針,故指針指向下一個(gè)數(shù)組地址應(yīng)為加64 write1616GDRAM(x,y,sign,pp[tt]); //寫入小時(shí)的十位 } /************************************************************************************** //函數(shù)功能:顯示16X32圖形,適用于st7920型液晶 //形式參數(shù):uchar x,uchar y,uchar *bmp //行參說明:橫坐標(biāo)X列,縱坐標(biāo)Y行,要顯示的圖形BMP //************************************************************************************/ void write1632GDRAM(uchar x,uchar y,uchar *bmp) { uchar i,j,basex,basey; switch(y) //由y縱坐標(biāo)定是上半屏還是下半屏 { case 1: basex=0x80; break; //上半屏 case 2: basex=0x80; break; //先上半屏,下面再下半屏。 case 3: basex=0x88; break; //下半屏 default: return; //別的則返回 } basey=basex+x-1; write_com(0x36); if(y==1||y==3) //如為第一第三行,則直接是在同一半屏,直接繪完32行點(diǎn)陳數(shù)據(jù)。 { for(i=0;i<32;i++) //寫入32行點(diǎn)陣 { write_com(0x80+i); //先寫入垂直位址,選上下32行的哪一行,不管上下半屏,首行都為0X80 write_com(basey); //再寫入水平位址(選上下半屏) for(j=0;j<2;j++) //2個(gè)8位元的數(shù)據(jù),即16BIT寬度 write_data(*bmp++); } } if(y==2) //從第二行開始則畫圖將上下半屏都有,所以先畫完上半屏16行,再畫下半屏16行。 { for(i=0;i<16;i++) //寫入上半屏16行點(diǎn)陣 { write_com(0x90+i); //先寫入垂直位址,選上下32行的哪一行,不管上下半屏,首行都為0X80,第二行為0X90。 write_com(basey); //(選上半屏)再寫入水平位址 for(j=0;j<2;j++) //2個(gè)8位元的數(shù)據(jù),即16BIT寬度 write_data(*bmp++); } for(i=0;i<16;i++) //寫入下半屏16行點(diǎn)陣 { write_com(0x80+i); //先寫入垂直位址,選上下32行的哪一行,不管上下半屏,首行都為0X80 write_com(basey+8); //(選下半屏)再寫入水平位址 for(j=0;j<2;j++) //2個(gè)8位元的數(shù)據(jù),即16BIT寬度 write_data(*bmp++); } } write_com(0x36); //寫完數(shù)據(jù),開圖片顯示 } /************************************************************************************** ** 函數(shù)名稱: init_12864_GDRAM() ** 功能描述: 在程寫GDRAM時(shí)序初始化12864 **************************************************************************************/ void init_12864_GDRAM() { write_com(0x30); //基本指令操作 write_com(0x0C); //整體顯示開,游標(biāo)關(guān),游標(biāo)位置關(guān) write_com(0x06); //光標(biāo)右移,DDRAM位址計(jì)數(shù)器(AC)加1,不整屏移動(dòng) lcm_clr(); //清屏 (清DDRAM) } /************************************************************************************** //函數(shù)名稱:Clean_12864_GDRAM(void) //函數(shù)功能:清屏函數(shù) //使用說明:GDRAM填滿0 //************************************************************************************/ void Clean_12864_GDRAM(void) { uchar x,y; write_com(0x36); init_12864_GDRAM(); //設(shè)置擴(kuò)展指令集,按手冊說明,僅設(shè)置了繪圖位, write_com(0x36); //需要兩次,本次設(shè)置擴(kuò)展指令集。 for (y=0;y<32;y++) { write_com(0x80+y); //設(shè)置y=1000+00xx,y+1則往下一行 write_com(0x80); //設(shè)置x=1000 0000 for (x=0;x<16;x++) { write_data(0x00); //高字節(jié)數(shù)據(jù) write_data(0x00); //低字節(jié)數(shù)據(jù) } } } /*-----------------------------------------------------------------------------------*/ #endif 我們用的是帶字庫的12864 |
296369969@qq.com 可以做的 |
Powered by 單片機(jī)教程網(wǎng)