MS12864R测试程序

合集下载

带字库12864液晶显示程序

带字库12864液晶显示程序

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define LCDdata P0//采用并行模式sbit E = P2^7;sbit RW = P2^6;sbit RS = P2^5;sbit RST = P2^4;sbit key1 = P2^0; //时、分、秒选择键sbit key2 = P2^1; //加一键sbit key3 = P2^2; //减一键void init();//void check_busy();void delayms(uint x);void write_com(uchar com);void write_data(uchar date);//void delay(uchar y);void t_bcd();void disp_time();void t_time();uchar code string[]={"00时00分00秒"}; uchar code tab[] ={"长春工业大学"}; uchar code tab1[]={"人文信息学院"}; uchar code tab2[]={"electronic 沈琦"};uchar time[6];//显示缓冲区uchar count;char sec,min,hour;//--------------主函数-----------------void main(){init();while(1){if(count == 200){count = 0;sec++;if(sec == 60){sec = 0;min++;if(min == 60){min = 0;hour++;if(hour == 24){hour = 0;}}}t_bcd();disp_time();}t_time();}}//-------------初始化----------------void init(){uchar i;// RST = 0;// delayms(1);// RST = 1;// delayms(40);write_com(0x30);write_com(0x0f);write_com(0x01);write_com(0x81);for(i=0;i<12;i++){write_data(string[i]);delayms(5);}write_com(0x90);for(i=0;i<16;i++){write_data(tab[i]);delayms(5);}write_com(0x8a);for(i=0;i<12;i++){write_data(tab1[i]);delayms(5);}write_com(0x98);for(i=0;i<16;i++){write_data(tab2[i]);delayms(5);}TMOD = 0x01;TH0 = (65536-5000)/256;TL0 = (65536-5000)%256;EA = 1;ET0 = 1;TR0 = 1;write_com(0x0c);}//------------毫秒延时--------------- void delayms(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}/*//--------------判忙程序--------------- void check_busy(){// LCDdata = 0xff;RS = 0;RW = 1;// E = 0;E = 1;LCDdata = 0xff;while(LCDdata&0x80);E = 0;}*///------------写命令----------------- void write_com(uchar com){// check_busy();RS = 0;RW = 0;E = 0;LCDdata = com;// delayms(5);E = 1;delayms(5);E = 0;}//-------------写数据------------------ void write_data(uchar date){// check_busy();RS = 1;RW = 0;E = 0;LCDdata = date;// delayms(5);E = 1;delayms(5);E = 0;}//-----------定时中断0------------- void timer0() interrupt 1{TH0 = (65536-5000)/256;TL0 = (65536-5000)%256;count++;}void t_bcd(){time[0] = sec%10;time[1] = sec/10;time[2] = min%10;time[3] = min/10;time[4] = hour%10;time[5] = hour/10;}//--------------时钟时间显示----------------- void disp_time(){write_com(0x85);write_data(0x30+time[1]);write_data(0x30+time[0]);write_com(0x83);write_data(0x30+time[3]);write_data(0x30+time[2]);write_com(0x81);write_data(0x30+time[5]);write_data(0x30+time[4]);}//------------调整时间程序--------------- void t_time(){static uchar num;if(key1 == 0){delayms(5);while(!key1);TR0 = 0;num++;}//-----------------调时-----------------if(num == 1){write_com(0x81);write_com(0x0f);if(key2 == 0){delayms(5);if(key2 == 0){while(!key2);hour++;if(hour == 24){hour = 0;}t_bcd();write_data(0x30+time[5]);write_data(0x30+time[4]);}}if(key3 == 0){delayms(5);if(key3 == 0){while(!key3);hour--;if(hour == -1){hour = 23;}t_bcd();write_data(0x30+time[5]);write_data(0x30+time[4]);}}}//-----------------调分----------------------if(num == 2){write_com(0x83);if(key2 == 0){delayms(5);if(key2 == 0){while(!key2);min++;if(min == 60){min = 0;}t_bcd();write_data(0x30+time[3]);write_data(0x30+time[2]);}}if(key3 == 0){delayms(5);if(key3 == 0){while(!key3);min--;if(min == -1){min = 59;}t_bcd();write_data(0x30+time[3]);write_data(0x30+time[2]);}}}//---------------调秒------------------if(num == 3){write_com(0x85);if(key2 == 0){delayms(5);if(key2 == 0){while(!key2);sec++;if(sec == 60){sec = 0;}t_bcd();write_data(0x30+time[1]);write_data(0x30+time[0]);}}if(key3 == 0){delayms(5);if(key3 == 0){while(!key3);sec--;if(sec == -1){sec = 59;}t_bcd();write_data(0x30+time[1]);write_data(0x30+time[0]);}}}//---------------退出调整时间----------------- if(num == 4){num = 0;write_com(0x0c);TR0 = 1;}}。

用12864做示波器(程序和图)

用12864做示波器(程序和图)

#include <reg51.h>#include <intrins.h>#include <ADC0808.c>sbit DI=P2^2; // 数据\指令选择sbit RW=P2^1; // 读\写选择sbit E=P2^0; // 读\写使能sbit CS1=P2^4; // 片选1sbit CS2=P2^3; // 片选2sbit busy=P1^7;sbit jia=P3^7;sbit jian=P3^3;sbit jia1=P3^0;sbit jian1=P3^1;unsigned int i;unsigned char ye,lei,shu; unsigned char a[94];char code t[]={0x00,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x40,0x60,0x80,0x00,0x7F,0xFF, //小0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80,0x82,0x7F,0xE2, //子0x00,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,0x40,0x00,0x60,0x3F,0x5E,0x01,0x48,0x01,0x48,0xFF,0xFF,0x11,0x48,0x21,0x4C, //制0x1F,0x68,0x00,0x40,0x07,0xF8,0x40,0x00,0x80,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x20,0xFF,0xF8,0x00,0x87,0x00,0x40,0x00,0x30,0x00,0x0F, //作0xFF,0xF8,0x08,0x88,0x08,0x88,0x08,0xC8,0x0C,0x88,0x08,0x0C,0x00,0x08,0x00,0x00,};void checkstate(){//bit dat;DI=0;RW=1;//P1=0x00;do{E=1;E=0;//仅当第7位为0时才可操作(判别busy信号)}while(busy==1);}void writecommand(unsigned char command) //写命令{checkstate();DI=0;RW=0;P1=command;E=1;E=0;}void writedate(unsigned char date) //写数据{checkstate();DI=1;RW=0;P1=date;E=1;E=0;}void pianxuan(unsigned int i){if(i==1)CS1=0,CS2=1;if(i==2)CS1=1,CS2=0;if(i==3)CS1=0,CS2=0;}void cleanscreen() //清屏{unsigned char page,i;for(page=0xb8;page<0xc0;page++){writecommand(page);writecommand(0x40);for(i=0;i<64;i++)writedate(0x00);}}void init(void) //开显示,起始行0行{writecommand(0xc0);writecommand(0x3f);}void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}void shuju(){pianxuan(i); writecommand(ye); writecommand(lei); writedate(shu);}void qing(){uchar i;for(i=0xb8;i<=0xbf;i++) {ye=i;shu=0x00;shuju();}}void main(){uint r,j,g=0,q,dianya=1,k,p;uchar U,m,l;pianxuan(3);cleanscreen();init();pianxuan(2);l=0xb8;for(k=0;k<4;k++,l=l+0x02){ye=l;lei=0x70;for(r=0;r<16;r++){shu=t[2*r+1+32*k];shuju();lei++;}ye=l+0x01;lei=0x70;for(r=0;r<16;r++){shu=t[2*r+32*k];shuju();lei++;}}while(1){uchar d1,d2,d3,d4,d5;aaa:do{adc();}while((AD!=128)&&(AD!=129)&&(AD!=130));U=AD;adc();if(U>AD)goto aaa;while(jia==0){while(jia==0);g=g+1;}while(jian==0){while(jian==0);if(g!=0) g=g-1;}while(jia1==0){while(jia1==0);dianya=dianya+1;}while(jian1==0){while(jian1==0);if(dianya!=1) dianya=dianya-1;}for(j=0;j<94;j++) //AD采样{adc();a[j]=AD;delay_50us(g);}lei=0x40;for(r=0,j=0;r<94;r++,j++){if(j<64) i=1;if(j==64) lei=0x40;if(j>=64)i=2;qing(); //清掉之前的内容AD=a[j]*0.196/dianya; //计算在12864的电压值if(AD<=7) ye=0xbf,shu=(0x80>>AD); else if(AD<=15) ye=0xbe,shu=0x80>>(AD-8); else if(AD<=23) ye=0xbd,shu=0x80>>(AD-16); else if(AD<=31) ye=0xbc,shu=0x80>>(AD-24); else if(AD<=39) ye=0xbb,shu=0x80>>(AD-32); else if(AD<=47) ye=0xba,shu=0x80>>(AD-40); else if(AD<=55) ye=0xb9,shu=0x80>>(AD-48); else if(AD<=63) ye=0xb8,shu=0x80>>(AD-56);if(r==0){d1=shu;d2=ye;}if(r!=0){d3=shu;d4=ye;if(ye==d2){if(shu>d1){d5=shu;d5=d5>>1;while(d5!=d1){d5=d5>>1;shu=shu|(shu>>1);}}if(shu<d1){d5=shu;d5=d5<<1;while(d5!=d1){d5=d5<<1;shu=shu|(shu<<1);}}if(ye<d2){for(q=0;q<7;q++){shu=shu|(shu<<1);}shuju();ye++;while(ye<d2) {shu=0xff,shuju(),ye++;}if(ye==d2){shu=0x01;if(shu<d1){d5=shu;d5=d5<<1;while(d5!=d1){d5=d5<<1;shu=shu|(shu<<1);}}}}if(ye>d2){for(q=0;q<7;q++){shu=shu|(shu>>1);}shuju();ye--;while(ye>d2) {shu=0xff,shuju(),ye--;}if(ye==d2){shu=0x80;if(shu>d1){d5=shu;d5=d5>>1;while(d5!=d1){d5=d5>>1;shu=shu|(shu>>1);}}}}}if(r!=0)d1=d3;d2=d4;}shuju();if(lei!=0x7f) lei++; }}}。

无字库12864液晶屏滚动显示程序共17页文档

无字库12864液晶屏滚动显示程序共17页文档

无字库12864液晶屏滚动显示程序[转] #include<reg52.h>#include<intrins.h>#include<absacc.h>#define Lcd_Bus P0 //MCU P0<------> LCM#define Disp_On 0x3f//开显示#define Disp_Off 0x3e//关显示#define Col_Add 0x40//列地址#define Page_Add 0xb8//页地址#define Start_Line 0xc0//起始页sbit cs1=P2^3; //Master chip enablesbit cs2=P2^4; //Slave chip enablesbit Enable=P2^2; // mode Enable singlesbit Di=P2^0; //Data or Instrument Selectsbit RW=P2^1; //Write or Readsbit Lcd_Rst=P2^5; //Lcm reset/*****************************字模,此字体下对应的点阵为:宽x高=16x16*****************************/unsigned char code Chinese_character[][32]={{0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x 12,0xF2,0x02,0x00 ,0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22 ,0x22,0x22,0x7F,0x00,0x00},/*"西",0*/{0x80,0x90,0x8C,0x84,0x84,0xF4,0xA5,0x86,0x84,0x84,0x84,0x84,0x 94,0x8C,0x84,0x00,0x80,0x80,0x80,0x40,0x47,0x28,0x28,0x10,0x28,0x24,0x43 ,0xC0,0x40,0x00,0x00,0x00},/*"安",1*/{0x00,0x42,0x62,0x5A,0xC6,0x10,0x54,0x54,0x54,0xFF,0x54,0x54,0x 7C,0x10,0x10,0x00,0x40,0x23,0x14,0x08,0x17,0x28,0x29,0x49,0x49,0x7F,0x49 ,0x49,0x49,0x49,0x40,0x00},/*"建",2*/{0x10,0x48,0x47,0xCC,0x54,0x44,0x14,0xE8,0x27,0x24,0x2C,0xF4,0x 04,0x04,0x04,0x00,0x10,0x30,0x10,0x0F,0x88,0x48,0x30,0x0F,0x01,0x06,0x00 ,0x3F,0x40,0x40,0x70,0x00},/*"筑",3*/{0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0x FF,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02 ,0x02,0xFF,0x01,0x01,0x00},/*"科",4*/{0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0x C8,0x48,0x08,0x00,0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C ,0x12,0x21,0x60,0x20,0x00},/*"技",5*/{0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x 20,0x20,0x20,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08 ,0x30,0x60,0xC0,0x40,0x00},/*"大",6*/{0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x 57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02 ,0x02,0x02,0x02,0x02,0x00},/*"学",4*/{0x00,0x02,0x1C,0xE8,0x00,0x40,0x60,0x58,0x47,0x22,0x20,0x28,0x 30,0xE0,0x40,0x00,0x02,0x02,0x7F,0x00,0x00,0x00,0x7F,0x21,0x21,0x21,0x21 ,0x21,0x7F,0x00,0x00,0x00},/*"冶",0*/{0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x 20,0x60,0x20,0x00,0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A ,0x42,0x42,0x40,0x40,0x00},/*"金",1*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x 02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20 ,0x20,0x20,0x20,0x20,0x00},/*"工",2*/{0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0x BF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44 ,0x44,0x44,0x44,0x40,0x00},/*"程",3*/{0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x 57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02 ,0x02,0x02,0x02,0x02,0x00},/*"学",4*/{0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x 24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F ,0x81,0x81,0x81,0xF1,0x00},/*"院",5*/{0x10,0x10,0xD0,0xFE,0x50,0x90,0x00,0x10,0x10,0x10,0xD0,0xFE,0x 10,0x10,0x10,0x00,0x08,0x06,0x01,0xFF,0x00,0x01,0x10,0x08,0x04,0x43,0x80 ,0x7F,0x00,0x00,0x00,0x00},/*"材",0*/{0x20,0x24,0xA8,0x70,0xFF,0x68,0xA4,0x20,0x42,0x8C,0x00,0x00,0x FF,0x00,0x00,0x00,0x08,0x06,0x01,0x00,0xFF,0x00,0x01,0x02,0x02,0x03,0x02 ,0x02,0xFF,0x01,0x01,0x00},/*"料",1*/{0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0xF8,0x08,0x 08,0x08,0xF8,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x20,0x40,0x3F,0x00,0x7F,0x10 ,0x10,0x10,0x3F,0x00,0x00},/*"加",2*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x 02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20 ,0x20,0x20,0x20,0x20,0x00},/*"工",4*/{0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x 02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20 ,0x20,0x20,0x20,0x20,0x00},/*"工",4*/{0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0x BF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44 ,0x44,0x44,0x44,0x40,0x00},/*"程",5*/};unsigned char code E[][16]={{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",0*/{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x 20,0x00,0x01,0x00},/*"r",1*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x 22,0x22,0x3F,0x20},/*"a",2*/{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x 24,0x24,0x19,0x00},/*"s",3*/{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x 18,0x06,0x01,0x00},/*"y",4*/{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x 20,0x11,0x0E,0x00},/*"b",5*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x 20,0x20,0x1F,0x00},/*"o",6*/{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x 18,0x06,0x01,0x00},/*"y",7*/{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x 22,0x22,0x13,0x00},/*"e",8*/};/***********************延时子程序***********************/ void delay(unsigned int k){unsigned int i;unsigned int j;for(i=0;i<k;i++)for(j=0;j<20;j++);}/***********************写命令左***********************/ void write_cmd_1(unsigned char command){cs1=1;cs2=0;Di=0;RW=0;Lcd_Bus=command; //P0口delay(0);Enable=1;delay(0);Enable=0;}/***********************写命令右***********************/ void write_cmd_2(unsigned char command){cs1=0;cs2=1;Di=0;RW=0;Lcd_Bus=command;delay(0);Enable=1;delay(0);Enable=0;}/***********************写数据左***********************/ void write_data_1(unsigned char dis_data){cs1=1;cs2=0;Di=1;RW=0;Lcd_Bus=dis_data;delay(0);Enable=1;delay(0);Enable=0;}/***********************写数据右***********************/ void write_data_2(unsigned char dis_data){cs1=0;cs2=1;Di=1;RW=0;Lcd_Bus=dis_data;delay(0);Enable=1;delay(0);Enable=0;}/***********************清内存左***********************/ void clear_1(void){unsigned char j,k;cs1=1;cs2=0;write_cmd_1(Page_Add+0);write_cmd_1(Col_Add+0);for(k=0;k<8;k++){write_cmd_1(Page_Add+k);for(j=0;j<64;j++)write_data_1(0x00);}}/***********************清内存右***********************/ void clear_2(void){unsigned char j,k;cs1=0;cs2=1;write_cmd_2(Page_Add+0);write_cmd_2(Col_Add+0);for(k=0;k<8;k++){write_cmd_2(Page_Add+k);for(j=0;j<64;j++)write_data_2(0x00);}}/***********************显示汉字16*16左************************/void Chinese_disp_1(unsigned char pag,unsigned char col,unsigned char n){unsigned char i=0;unsigned char j=0;cs1=1;cs2=0;for(i=0;i<2;i++){write_cmd_1(Page_Add+pag+i);write_cmd_1(Col_Add+col);for(j=0;j<16;j++)write_data_1(Chinese_character[n][16*i+j]);}}/***********************显示汉字16*16右***********************/ void Chinese_disp_2(unsigned char pag,unsigned char col,unsigned char n){unsigned char i=0;unsigned char j=0;cs1=0;cs2=1;for(i=0;i<2;i++){write_cmd_2(Page_Add+pag+i);write_cmd_2(Col_Add+col);for(j=0;j<16;j++)write_data_2(Chinese_character[n][16*i+j]);}}/***********************显示英文16*8左************************/ void E_disp_1(unsigned char pag,unsigned char col,unsigned char n) {unsigned char i=0;unsigned char j=0;cs1=1;cs2=0;for(i=0;i<2;i++){write_cmd_1(Page_Add+pag+i);write_cmd_1(Col_Add+col);for(j=0;j<8;j++)write_data_1(E[n][8*i+j]);}}/***********************显示英文16*8右***********************/ void E_disp_2(unsigned char pag,unsigned char col,unsigned char n) {unsigned char i=0;unsigned char j=0;cs1=0;cs2=1;for(i=0;i<2;i++){write_cmd_2(Page_Add+pag+i);write_cmd_2(Col_Add+col);for(j=0;j<8;j++)write_data_2(E[n][8*i+j]);}}/***********************液晶屏初始化***********************/ void init_lcd(){Lcd_Rst=0;delay(100);Lcd_Rst=1;delay(100);write_cmd_1(Disp_Off); write_cmd_2(Disp_Off);write_cmd_1(Page_Add+0); write_cmd_2(Page_Add+0);write_cmd_1(Start_Line+0); write_cmd_2(Start_Line+0);write_cmd_1(Col_Add+0); write_cmd_2(Col_Add+0);write_cmd_1(Disp_On); write_cmd_2(Disp_On);}/***********************LCD显示子程序***********************/ void display(void){unsigned char i;for(i=Start_Line;i<0xff;i++){Chinese_disp_1(0,0, 0);Chinese_disp_1(0,16,1);Chinese_disp_1(0,32,2);Chinese_disp_1(0,48,3);Chinese_disp_2(0,0, 4);Chinese_disp_2(0,16,5);Chinese_disp_2(0,32,6);Chinese_disp_2(0,48,7);//西安建筑科技大学Chinese_disp_1(2,16,8);Chinese_disp_1(2,32,9);Chinese_disp_1(2,48,10);Chinese_disp_2(2,0,11);Chinese_disp_2(2,16,12);Chinese_disp_2(2,32,13);//冶金工程学院Chinese_disp_1(4,16,14);Chinese_disp_1(4,32,15);Chinese_disp_1(4,48,16);Chinese_disp_2(4,0,17);Chinese_disp_2(4,16,18);Chinese_disp_2(4,32,19);//材料加工工程E_disp_1(6,24,0);E_disp_1(6,32,1);E_disp_1(6,40,2);E_disp_1(6,48,3);E_disp_1(6,56,4);E_disp_2(6,0,5);E_disp_2(6,8,6);E_disp_2(6,16,7);E_disp_2(6,24,8);//Crasyboyewrite_cmd_1(i);write_cmd_2(i);delay(3000);//调整滚动速度}//delay(60000);}/***********主程序************/ void main(void){ init_lcd();clear_1();clear_2();while(1){display();}}希望以上资料对你有所帮助,附励志名言3条:1、宁可辛苦一阵子,不要苦一辈子。

很好用的12864驱动程序

很好用的12864驱动程序

///////////////////////////////////////////////////////////#include<>#include<>#define uchar unsigned char#define uint unsigned int//////////单片机与液晶显示的引脚连接/////////sbit P32=P3^2; //RSTsbit P33=P3^3; //CS2sbit P34=P3^4; //CS1sbit P35=P3^5; //Esbit P36=P3^6; //rs&DIsbit P37=P3^7; // R/W////////延时/////////void delay(uint v){while(v!=0)v--;}////////复位///////////void reset(){P32=0;delay(10);delay(10);}////////write code写指令///////void wcode(uchar c,uchar cs1,uchar cs2) {P34=cs1;P33=cs2;P37=0;P36=0;P1=c;P35=0;delay(10);P35=1;delay(10);P35=0;}/////////write data写数据///////////////void wdata(uchar c,uchar cs1,uchar cs2) {P34=cs1;P33=cs2;P37=1;P36=0;P35=0;delay(10);P35=1;delay(10);P35=0;}////////////set start设置起始行/////////////void set_startline(uchar i)//起始行。

11A5A4A3A2A1A0 共有64行// 液晶显示器的最底层为第一行{i=0xc0+64-i;//此算法为把最顶层做为第一层wcode(i,1,1);}////////////set 页值设置,起始列值函数/////////////void set_adr(uchar x,uchar y){x=x+0xb8;//页地址设置。

12864液晶测试程序

12864液晶测试程序

#include <REG52.h>#define uint unsigned int#define uchar unsigned charsbit CS=P2^0;sbit SID=P2^1;sbit SCLK=P2^2;sbit PSB=P2^3;void delay_1ms(uint x)//延时xms{uint i,j;for(j=0;j<x;j++)for(i=0;i<110;i++);}void send_command(uchar command_data){uchar i;uchar i_data;i_data=0xf8;CS=1;SCLK=0;for(i=0;i<8;i++) //第一字节,发送命令,11111000-些指令{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data; /*获取命令的高四位,低四位补零*/ i_data&=0xf0;for(i=0;i<8;i++) //第二字节{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data<<=4;for(i=0;i<8;i++) //第三字节{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;delay_1ms(10);}void send_data(uchar command_data){uchar i;uchar i_data;i_data=0xfa;CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;delay_1ms(10);}void lcd_init(){ PSB=0;delay_1ms(100);send_command(0x30); /*设置8位数据接口,基本指令模式。

12864液晶测试程序

12864液晶测试程序
arwei,num;
num=0;
switch(x)
{
case 0:wei=0x80;break;
case 1:wei=0x90;break;
case 2:wei=0x88;break;
case 3:wei=0x98;break;
}
write_cmd(wei+y);
while(*(p+num)!='\0')
LCD_RW=0;//
LCD_EN=0;
LCD_data=cmd;
LCD_EN=1;
delay_1ms(1);
LCD_EN=0;
delay_1ms(1);
}
/*****************************************
写数据到指令寄存器
******************************************/
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#defineucharunsigned char
#defineuintunsignedint
#defineLCD_dataP0
sbitLCD_RS=P3^5;
sbitLCD_RW=P3^6;
sbitLCD_EN=P3^4;
sbitDS18B20_DQ=P2^7;
sbitFM=P2^0;//蜂鸣器端口
sbitkey=P2^1;
ucharcode str1[]="床前明月光";
ucharcode str2[]="疑似地上霜";

12864液晶程序+仿真图

12864液晶程序+仿真图

/**********************************************************12864是由两块64*64的液晶屏组成的。

当中页是通过自己去定义的。

**********************************************************/#include"reg51.h"#define uchar unsigned char#define uint unsigned intsbit lcdrst=P3^0;sbit cs2=P3^5;sbit cs1=P3^4;sbit e=P3^2;sbit rw=P3^3;sbit rs=P3^1;/************************************************代码:字模生成可以在取模软件生成。

方法是阴码列行式逆向************************************************/uchar code qin[]={0x04,0x04,0xC4,0x5F,0x54,0xF4,0x54,0x5F,0xC4,0x14,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,0x80,0x95,0x95,0x95,0x7F,0x55,0x55,0x95,0x60,0x1C,0x03,0x20,0x60,0x3F,0x00};// 勤uchar code mian[]={0x00,0xF0,0x2C,0x27,0xE4,0x34,0x2C,0xE4,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x40,0x21,0x11,0x0F,0x01,0x3F,0x41,0x49,0x44,0x43,0x40,0x44,0x48,0x47,0x70,0x00};//勉uchar code li[]={0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00};//理uchar code gong[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00 }; //工uchar code xue[]={0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00};//学uchar code yuan[]={0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00};//院uchar code dian[]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};//电uchar code zi[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00};//子uchar code cheng[]={0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00};//程uchar code tong[]={0x40,0x41,0xC6,0x00,0x00,0xF2,0x52,0x52,0x56,0xFA,0x5A,0x56,0xF2,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x5F,0x42,0x42,0x42,0x5F,0x4A,0x52,0x4F,0x40,0x40,0x00};//通uchar code xin[]={0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00};//信uchar codeban[]={0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00,0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00};//班uchar code ling[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//0uchar code ba[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//8uchar code yi[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//1uchar code kongge[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//不显示任何内容uchar code kong[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //不显示任何内容uchar code huo[]={0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0x02,0x40,0x20,0x18,0x10,0x00,0x00,0x00,0x00,0x80,0x41,0x20,0x10,0x0C,0x03,0x00,0x03,0x04,0x18,0x30,0x60,0x20,0x00,0x00};//火uchar code yun[]={0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x64,0x60,0x40,0x00,0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00};//云uchar code xie[]={0x00,0x22,0x3E,0x22,0x22,0xA2,0xFE,0x22,0x00,0xFE,0x02,0x22,0x5A,0x86,0x02,0x00,0x10,0x10,0x08,0x04,0x23,0x40,0x3F,0x00,0x00,0xFF,0x00,0x04,0x08,0x08,0x07,0x00};//邪uchar code shen[]={0x08,0x08,0x89,0xCE,0xA8,0x18,0x00,0xF8,0x48,0x48,0xFF,0x48,0x48,0xF8,0x00,0x00,0x02,0x01,0x00,0xFF,0x00,0x03,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00};//神/*************************************************延时函数**************************************************/void delay(uchar z){uchar i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}/********************************************检查状态*********************************************/void checkbusy(){uchar dat;rs=0; //数据\指令选择rw=1; //允许读do{P2=0x00; //清零P2口delay(5);e=1;dat=P2; //读P2口e=0;dat>>=7; //仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00));}/*************************************写命令***********************************/void write_com(uchar com){checkbusy(); //检查是否忙rs=0; //写命令rw=0;P2=com;e=1;e=0;}/*************************************写数据***********************************/void write_data(uchar date){checkbusy(); //检查是否忙rs=1; //写数据rw=0;P2=date;e=1;e=0;}/*************************************显示汉字***********************************/void hanzi(uchar ye,uchar lie,uchar *daima){uchar i,j;for(i=0;i<2;i++){write_com(0xb8+ye+i); // ye页与ye+1页write_com(0x40+lie); //确定初始行for(j=0;j<16;j++){write_data(daima[i*16+j]); //写数据(汉字)}}}/*************************************显示数字***********************************/void shuzi(uchar ye,uchar lie,uchar *daima){uchar i,j;for(i=0;i<2;i++){write_com(0xb8+ye+i); // ye页与ye+1页write_com(0x40+lie); //确定初始行for(j=0;j<8;j++){write_data(daima[i*8+j]); //写数据(数字)}}}/***************************************清屏***************************************/void clearlcd(){uchar i,j;cs1=0; //清全屏有cs1=0 cs2=0 与无cs1=0 cs2=0 效果不同cs2=0;for(i=0;i<8;i++)write_com(0xb8+i);write_com(0x40);for(j=0;j<64;j++)write_data(0x00);}}/**************************************** 初始化LCD****************************************/ void init(){write_com(0x3e); //关显示delay(1);write_com(0x3f); //开显示write_com(0xc0); //行初始地址write_com(0xb8); //页初始地址write_com(0x40); //列初始地址}/**************************************** 显示数据****************************************/ void display()cs1=0; //左半屏cs1=0 cs2=1cs2=1;hanzi(0,0,qin);hanzi(0,16,mian);hanzi(0,32,li);hanzi(0,48,gong);cs1=1; //右半屏cs1=1 cs2=0cs2=0;hanzi(0,0,xue);hanzi(0,16,yuan);//hanzi(0,32,kongge); // 如果清屏时加上cs1=0 cs2=0则可以不用,否则要加上//hanzi(0,48,kongge);cs1=0;cs2=1;hanzi(2,0,dian);hanzi(2,16,zi);hanzi(2,32,gong);hanzi(2,48,cheng);cs1=1;cs2=0;hanzi(2,0,xue);hanzi(2,16,yuan);//hanzi(2,32,kongge);//hanzi(2,48,kongge); cs1=0;cs2=1;shuzi(4,0,ling); shuzi(4,8,ba);hanzi(4,16,tong); hanzi(4,32,xin); hanzi(4,48,gong);cs1=1;cs2=0;hanzi(4,0,cheng); shuzi(4,16,yi);hanzi(4,24,ban);//hanzi(4,40,kongge); shuzi(4,56,kong);cs1=0;cs2=1;hanzi(6,0,huo); hanzi(6,16,yun); hanzi(6,32,xie); hanzi(6,48,shen);cs1=1;cs2=0;//hanzi(6,0,kongge);//hanzi(6,16,kongge);//hanzi(6,32,kongge);//hanzi(6,48,kongge);}/**************************************** 主函数****************************************/ void main(){init();clearlcd();while(1){display();}}。

12864液晶显示资料及程序

12864液晶显示资料及程序

12864液晶显示资料及程序硬件连接方式是:并口直接访问。

这是汉字显示程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define datawr 0x1200 //写数据通道#define comwr 0x1000 //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100 //读忙通道uchar code disp_data[]={" 浙江大学" //第一行,第一页"04级通信工程一班" //第三行" 宁波理工学院" //第二行" 竞赛小组" //第四行"128X64液晶显示器" //第一行,第二页" 测试程序" //第三行" 07年07月25日" //第二行" Tornado "}; //第四行void set12864();void write_command(uchar command);void write_page(uchar data_add);void read_page(uchar data_add);void delays(uchar cont);void main(){while(1){set12864(); //初始化12864write_page(0); //写入一页数据read_page(0x30); //读出一页数据到内部RAMdelays(2); //延时2swrite_page(64); //写入下一页数据delays(2); //延时2s}}//初始化12864子程序void set12864(){write_command(0x30); //功能设定控制字write_command(0x0c); //显示开关控制字write_command(0x01); //清除屏幕控制字write_command(0x06); //进入设定点控制字}//写控制命令子程序void write_command(uchar command){bit flag=1; //12864空闲标志位while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[comwr]=command; //空闲传送控制字}//写一页子程序void write_page(uchar data_add){bit flag=1; //12864空闲标志位uchar num=64; //64个循环,连续写入32个汉字或是64个西文字符write_command(0x80);for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据}}//读一页子程序void read_page(uchar data_add){bit flag=1; //12864空闲标志位uchar num=64; //64个循环,连续写入32个汉字或是64个西文字符write_command(0x80);for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;DBYTE[data_add++]=XBYTE[datare]; //空闲传送数据}}//延时cont秒子程序void delays(uchar count){unsigned char h,i,j,k;do{for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}while(--count);}这是图象显示程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define datawr 0x1200 //写数据通道#define comwr 0x1000 //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100 //读忙通道uchar code disp_data[] = // 数据表{0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00 ,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00 ,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00 ,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00 ,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x0 0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x8 0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0 3,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0 0,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8 0,0x00,0x0B,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8 0,0x00,0x00,0x1F,0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC 0,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xF3,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC 0,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xE6,0x62,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE 1,0x60,0x00,0x68,0x01,0xFF,0xFF,0xFE,0x00,0x60,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1 ,0x00,0x00,0x0E,0x01,0xFF,0xFF,0xF8,0x00,0x4B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0 ,0x8E,0x08,0x79,0x07,0xFF,0xFF,0xF0,0x00,0x41,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6 ,0xC0,0x07,0x61,0xC3,0xFF,0xFE,0xC0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xED,0xEF,0x3F,0x83,0xFF,0xFE,0x60,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xC0,0xFF,0xFD,0xFC,0x6C,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xFF,0xF0,0x7F,0xF3,0xFF,0xFE,0x60,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0x50,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xC9,0xFB,0xFF,0xF1,0xF8,0x8C,0xD8,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFB,0x6F,0xD9,0xC2,0x3F,0xF8,0x40,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6 ,0xDF,0x1E,0xFF,0xFF,0x7F,0xFC,0x38,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x64 ,0x2F,0x6F,0xFF,0xFD,0x7B,0xFC,0x1F,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x5 F,0x7C,0xEE,0xFF,0xC7,0xFF,0xBC,0x0F,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xD F,0xFE,0xEF,0xFF,0xFF,0xE7,0xDC,0x07,0xE7,0xF8,0x12,0x7F,0xFF,0xFF,0xFF,0xFF,0x4 7,0xFF,0xFF,0xFF,0xFF,0xE7,0x80,0x03,0xF4,0x00,0x00,0x5F,0xFF,0xFF,0xFE,0xFE,0xE30xFF,0xFE,0xC0,0x01,0xC0,0x00,0x00,0x1B,0xFF,0xFF,0xFB,0xFF,0xF F,0xFF,0xFF,0xFF,0x7F,0xEE,0xC0,0x00,0xC0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xFE,0x98,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF, 0xFF,0xFF,0xFF,0x20,0x0E,0x60,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x8F,0xFF,0xFF, 0xFF,0xFF,0xFF,0x05,0x80,0xE0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFD,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0x09,0x80,0xA0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7F,0xFF,0xFF, 0xFF,0xFF,0xFF,0x85,0x2A,0xC0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFB,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFE,0xBF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xF7,0xFF,0xFF,0xFF, 0xFF,0xFF,0xF8,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xC0,0x1F,0xFF,0xFF,0x80,0x00,0x40,0x00,0x00,0x00,0xFF,0x80,0xFF,0xFF,0xFF, 0x80,0x07,0xFF,0xFF,0xFF,0xC0,0x00,0xC0,0x00,0x00,0x01,0xFF,0x01,0xFF,0xFF,0xF8 ,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x63,0x80,0x00,0x00,0x01,0xFE,0x01,0xFF,0x18,0x00, 0x3F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x01,0xCC,0x01,0xFE,0x00,0x07, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0xA0,0x03,0xFC,0x00,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x05,0xC0,0x03,0xC8,0x00,0x7F, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x88,0x0C,0x07, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xC0, 0x7F,0xFF,0xFF,0xFF,0xFF,0xF8,0x07,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0 x0F,0xFF,0xFE,0xFF,0xFF,0xD0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F, 0x03,0xFF,0xF8,0xFF,0xFC,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x3F,0xFF,0xC0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,00xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0 x00,0x1F,0xFE,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0 x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x78,0x00,0x00,0x00,0x00,0 x00,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0 x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x27,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x04,0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x01};void set12864();void setxy(uchar x,uchar y);void write_command(uchar command);void write_16byte(uint data_add);void delays(uchar count);void main(){uchar x,y,i;while(1){y="0x80"; //设置液晶上半部分坐标x="0x80";delays(2); //延时2sset12864(); //初始化12864delays(2);for(i=0;i<32;i++) //写入液晶上半图象部分{ //写入坐标setxy(x,y);write_16byte(i*16); //连续写入16字节数据y++; //y轴地址加1}y="0x80"; //设置液晶下半部分坐标x="0x88";for(i=0;i<32;i++) //写入液晶下半图象部分{setxy(x,y); //写入坐标write_16byte((32+i)*16);//连续写入16字节数据y++; //y轴地址加1}write_command(0x34); //写入扩充指令命令write_command(0x36); //显示图象}}//初始化12864子程序void set12864(){write_command(0x30); //功能设定控制字write_command(0x0c); //显示开关控制字write_command(0x01); //清除屏幕控制字write_command(0x06); //进入设定点控制字}//设置绘图坐标void setxy(uchar x,uchar y){write_command(0x34); //写入扩充指令命令write_command(y); //写入y轴坐标write_command(x); //写入x轴坐标write_command(0x30); //写入基本指令命令}//写控制命令子程序void write_command(uchar command){bit flag="1"; //12864空闲标志位while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[comwr]=command; //空闲传送控制字}void write_16byte(uint data_add){bit flag="1"; //12864空闲标志位uchar num="16"; //16个循环,连续写入16个字节for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据}}//延时count秒子程序void delays(uchar count){unsigned char h,i,j,k;do{for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}while(--count);}圣斗士之家2009-07-28 23:13:30#include#include#define uchar unsigned char#define datawr 0x1200 //写数据通道#define comwr 0x1000 //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100; //读忙通道uchar code disp_data[]={" 浙江大学 " //第一行,第一页"04级通信工程一班" //第三行" 宁波理工学院 " //第二行" 竞赛小组 " //第四行"128X64液晶显示器" //第一行,第二页" 测试程序 " //第三行" 07年07月25日 " //第二行&nbsp; " Tornado "}; //第四行void set12864();void write_command(uchar command);void write_page(uchar data_add);void read_page(uchar data_add);void delays(uchar cont);void main(){while(1){set12864(); //初始化12864write_page(0); &nbsp; //写入一页数据read_page(0x30); //读出一页数据到内部RAMdelays(2); //延时2swrite_page(64); //写入下一页数据delays(2); //延时2s}}//初始化12864子程序void set12864(){write_command(0x30); //功能设定控制字write_command(0x0c); //显示开关控制字write_command(0x01); //清除屏幕控制字write_command(0x06); //进入设定点控制字}//写控制命令子程序void write_command(uchar command){bit flag="1"; //12864空闲标志位while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[comwr]=command; //空闲传送控制字}//写一页子程序void write_page(uchar data_add){bit flag="1"; //12864空闲标志位uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符 write_command(0x80);for(;num>0;num--){while(flag)//检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据}}//读一页子程序void read_page(uchar data_add){bit flag="1"; //12864空闲标志位uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符 write_command(0x80);for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;DBYTE[data_add++]=XBYTE[datare]; //空闲传送数据}}//延时cont秒子程序void delays(uchar count){unsigned char h,i,j,k;do{for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}while(--count);}这是图象显示程序:#include#include#define uchar unsigned char#define uint unsigned int#define datawr 0x1200 //写数据通道#define comwr 0x1000&nbsp; //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100 //读忙通道uchar code disp_data[] = // 数据表{0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00, 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00, 0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x80,0x00,0x00, 0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xF F,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x07,0xF F,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x0 B,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00, 0x1F,0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0 0,0x00,&nb14#inc lude <stdio.h>#inc lude <conio.h>int main(void){int c;int a;a = getchar();printf ("%c",a);/* Note that getc har reads from stdin andis line buffered; this means it w illnot return until you press ENTER. */while ((c = getc har()) != '\n'){printf("%c", c);}return 0;}注:可以利用getchar()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,用法:在主函数结尾,return 0;之前加上getchar();即可getchar 的用途是从从标准输入流读取一个字符,读回车符时退出getchar();永远只向缓存中输入一个字符,getchar();的用法很多;一种就是清空回车符这种情况一般发生在在循环中涉及到输入的情况还有一种是某些编译平台(IDE)在运行程序时并没有在程序运行后给人看结果的时间这时候在程序最后加上getchar()就能造成程序的暂停给程序员度结果的机会用getchar时,在键盘上按一个字符后,要按回车才能读取进去;用getch时,在键盘上按一个字符马上就被读取进去,不用按回车,因此可以作为“按任意键继续”的执行语句。

12684 按键检测

12684 按键检测

/***********************main.c***********************************程序描述:串行控制12864显示及AD按键检测程序开发环境:IAR硬件连接:设定12864 cs为P25设定12864 wr为P24设定12864 en为P23AD按键检测,模拟输入端为P1^5*****************************************************************/#include "msp430g2553.h"#include "12864ser.h"unsigned char s1[] ={" 汉字显示LCD "};unsigned char s2[] ={"MSP_430 开发系统"};int s3 = 1100;float s4 = 23.768;int result=0;void delay(unsigned int a){while(a--);}void init_all(void){WDTCTL = WDTPW+WDTHOLD; // 停止看门狗定时器P2DIR |=BIT3+BIT4+BIT5; // P2^3 P2^4 P2^5 设置为输出P2OUT |= BIT5; // P2^5 12864的CS给高电平(打开片选)P1DIR |= BIT0; // P1^0(红色LED)设置为输出P1OUT &= ~BIT0; // 关闭红色LEDinit_lcd();clrram();ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // 转换时钟选择ADC10ON(打开ADC10), interrupt enabled(使能中断)ADC10CTL1 = INCH_5; // input A5(选择输入通道A1,对应P1.5口)ADC10AE0 |= 0x02; // PA.1 ADC option select (使能P1.5模拟输入)//GIE --> globle interrupt enable,打开CPUOFF不行啊!!!打开就不干活了…………__bis_SR_register(/*CPUOFF*/ + GIE); // LPM0, ADC10_ISR will force exit (开总中断,低功耗模式)/*for(unsigned char i=0;i<3;i++) //开机闪烁三次{P1OUT |= 0X01; //LED P1^0 ONdelay(50000);delay(50000);P1OUT &= ~0X01;delay(50000);delay(50000);}*/}uchar anjian(void){uchar a;ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start (ADC10开始采样转换)result = ADC10MEM;if (result < 10){wr_string(0,1,"上");a=1;}else if(result < 550 ){wr_string(0,1,"左");a=2;}else if(result < 700 ){wr_string(0,1,"中");a=3;}else if(result < 780 ){wr_string(0,1,"下");a=4;}else if(result < 900 ){wr_string(0,1,"右");a=5;}else{wr_string(0,1,"无");a=0;}return a;}void main(void){uchar press=0;init_all();wr_string(0,0,"你的按键是:");while(1){press = anjian();switch(press){case 1: break;case 2: break;case 3: break;case 4: break;case 5: break;case 0: break;}}}//-------------------------------------------------------------------------------// ADC10 interrupt service routine#pragma vector=ADC10_VECTOR //AD中断服务程序(在init()中可以设置是否打开中断)__interrupt void ADC10_ISR(void){//进中断红灯(P1^0)闪烁一次P1OUT |= 0X01; //LED P1^0 ONdelay(5000);P1OUT &= ~0X01;delay(5000);// __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)}/**********************************12864ser.h**********************************/ //设定wr为P24//设定en为P23//*****************************************************************************/ #define uint unsigned int#define uchar unsigned char//在此设置输入端口*************************************************************/ #define LCD_SID1 P2OUT|=BIT4#define LCD_SID0 P2OUT&=~BIT4 //WR 做数据传输使用sid#define LCD_SCLK1 P2OUT|=BIT3#define LCD_SCLK0 P2OUT&=~BIT3 //EN 当做串行时钟使用sclk//*****************************************************************************/ #define CPU_F ((double)8000000)//cpu frequency8000000#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/2000000.0))#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/2000.0))//空函数#define nop() _NOP();//允许使能函数*******************#define _enin() __enable_interrupt()//*********************************#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1/**********************************功能列表************************************/// x0为行号,x为x0行的第x个uchar num[]={"0123456789"};void init_lcd(void); //初始化void clrram(); //清屏void clr_lcd(uchar x,uchar x0,uchar length); //清除lcd任意位置字符从x0行,的第x个位置(1、16),清除length个字符void lcd_xy(uchar x,uchar x0); //定位光标void wr_lcd(uchar dat_comm,uchar content); //写数据/地址或命令dat_comm为数据content数据void wr_data(uchar x,uchar x0,uchar data); //写单个字符void wr_string(uchar x,uchar x0,uchar *p); //写字符串,汉字8个,字符16个void wr_int(uchar x,uchar x0,uint NUM); //写入4位整形数据void wr_float(uchar x,uchar x0,float NUM); //写入xx.xxx型浮点数/**************************12864初始化函数*************************************/void init_lcd(void){wr_lcd(comm,0x30);//8-BIT控制接口,基本指令集动作wr_lcd(comm,0x01);//清除显示全屏清除delay_ms(1);wr_lcd(comm,0x06);//光标右移,AC自动加一,整体显示不移动wr_lcd(comm,0x0c);//整体显示ON,光标显示OFF,光标位置不反白闪烁}/*************************************清屏函数********************************/void clrram(){wr_lcd(comm,0x30);//8-BIT控制接口,基本指令集动作wr_lcd(comm,0x01);//清除显示delay_us(180);}/*清除lcd任意位置字符,position为任一位置的起始地址,length为长度,取值为1-64(若只清一行最大为16)*/void clr_lcd(uchar x,uchar x0,uchar length){uint i;uchar pos;switch(x0) //x0为行号{ //x为行的光标位置一行有16个case 0: pos=0x80+x;break; //行列转换为地址case 1: pos=0x90+x;break;case 2: pos=0x88+x;break;case 3: pos=0x98+x;break;default: break;}wr_lcd(comm,pos); //定位光标for(i=0;i<length;i++) //写零清除数据在Pos位置写写数据长度次{wr_lcd (dat,0x20); //填充空格}}//**********************************写命令或数据*******************************/ void wr_lcd(uchar dat_comm,uchar content){ //要写的数据uchar a,i,j;delay_us(50);a=content;LCD_SCLK0; //en=0;LCD_SID1; //wr=1for(i=0;i<5;i++) //数据时序{LCD_SCLK1;LCD_SCLK0;}LCD_SID0; //wr=0LCD_SCLK1; //en=1LCD_SCLK0; //en=0if(dat_comm) LCD_SID1;else LCD_SID0;LCD_SCLK1;LCD_SCLK0;LCD_SID0;LCD_SCLK1;LCD_SCLK0;for(j=0;j<2;j++) //8次循环写写一字节数据{for(i=0;i<4;i++){if(a&0x80)LCD_SID1;elseLCD_SID0;a=a<<1;LCD_SCLK1;LCD_SCLK0;}LCD_SID0;for(i=0;i<4;i++) //时钟{LCD_SCLK1;LCD_SCLK0;}}}/***************************用于中间调用,写地址********************************/ void lcd_xy(uchar x,uchar x0){uchar pos=0;switch(x0){case 0: pos=0x80+x;break;case 1: pos=0x90+x;break;case 2: pos=0x88+x;break;case 3: pos=0x98+x;break;default:break;}wr_lcd(comm,pos);}/**********************************显示单个字符********************************/void wr_data(uchar x,uchar x0,uchar data ){uchar pos=0;switch(x0){case 0: pos=0x80+x;break;case 1: pos=0x90+x;break;case 2: pos=0x88+x;break;case 3: pos=0x98+x;break;default:break;}wr_lcd(comm,pos);//comm为零。

12864液晶显示程序.docx

12864液晶显示程序.docx

*/*/#include <ieg51.h>#include <intiiiis.h>frdefine uchar unsigned char frdefine umt unsigned mtsbit LCD_RS = P2A0;sbit LCD_RW = P2T;sbit LCD_EN = P2A2;uchai code disl[] = {n I LOVE 8051 MCU n}; uchai code dis2[] = {M TEL:138********H};/*延时子程序void delay(mt nis)mt i; while(nis-)fbr(i = 0; i< 250; i++)_nop_(); _nop_(); _nop_(); _nop_();严******************************************************************/ 严检查LCD 忙状态/*lcd_busy为1时,忙,等待o lcd-busy为0时,闲,可写指令与数据。

严******************************************************************/bit lcd_busv(){bit result; LCD_RS = 0;LCD_RW=1;LCD_EN= 1;_nop_0;_nop_0;_nop_0;_nop_0;result = (bit)(P0&0x80);LCD_EN = 0; return result;严******************************************************************/ 严写指令数据到LCD严RS=L, RW=L,己=高脉冲,D0-D7=指令码。

严******************************************************************/void lcd_wcmd(uchai- cmd) {while(lcd_busyQ);LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_0; LCD_EN= 1;_nop_0;_nop_0;_nop_0;_nop_0;LCD_EN = 0;严******************************************************************/ 严写显示数据到LCD严RS=H, RW=L,己=高脉冲,D0-D7=数据。

12864中文字库液晶测试实验

12864中文字库液晶测试实验

实验七、12864中文字库液晶测试实验
(一)、实验目的:
熟悉12864中文字库液晶模块的管教定义以及接口连接控制方式,学会用C语言编写12864液晶模块的驱动程序,并在此基础上通过单片机的控制将文本数据或图形数据显示在该液晶屏上。

(二)、实验接线和步骤:
串行控制方式测试实验
1、将液晶电源VLCD跳线用短路块接好。

这是所有液晶模块的电源。

2、将U13(上面的8位拨码开关)的“6”、“7”、“8”三位拨到“ON”位置。

这三
位是控制和串行数据接口。

3、将液晶12864插入20引脚的“C”(串-拼音的首字母),注意引脚对应。

4、下载测试程序。

并行控制方式测试实验
1、将液晶电源VLCD跳线用短路块接好。

这是所有液晶模块的电源。

2、将U13(上面的8位拨码开关)的“1、5、6、7”四位拨到“ON”位置。

并行方
式数据口使用的是P0口。

将U14的所有拨码都断开,防止8位4联数码管影响
P0口电压,进而影响该液晶的数据传输。

3、将液晶12864插入20引脚的“B”(并-拼音的首字母),注意液晶板引脚插针和
实验板插座对应位置(1对应1,20对应20)。

4、下载测试程序。

说明:因程序例程篇幅过长,不方便以书面形式列出,为方便使用者,例程的原代码及工程文件所有文档均已附在电子文档“12864中文字库液晶测试实验”文件夹中。

使用者可在例程程序的基础上改变某些参数以观察不同的实验效果。

12864点阵液晶显示测试程序(带字库)

12864点阵液晶显示测试程序(带字库)

12864点阵液晶显示测试程序(带字库)接口说明1 12864-1测试程序:#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1sbit rs = P1^1; //H=data; L=command;sbit rw = P1^2; //H=read; L=write;sbit e = P1^3; //input enable;sbit psb= P1^4; //H=并口; L=串口;sbit rst= P1^5; //Reset Signal 低电平有效sbit busy=P2^7; //lcd busy bitvoid wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);uchar code tab1[]={" 床前明月光, "" 疑是地上霜, ""举头望明月, ""低头思故乡。

"};uchar code tab31[]={"你的选择""没有错"};uchar code tab32[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名1.bmp --*//*-- 宽度x高度=128x32 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x FF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF,0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};uchar code tab5[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名.bmp --*//*-- 宽度x高度=128x64 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };/*------------------初始化-----------------*/void init_lcd (void){rst=1;psb=1;wr_lcd (comm,0x30); /*30---基本指令动作*/wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/}/*---------------显示汉字或字符----------------*/ void chn_disp (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);for (j=0;j<4;j++){for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}}/*-----------上半屏显示汉字或字符------------*/ void chn_disp1 (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}/*----------------显示图形-----------------*/void img_disp (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x1+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j-32);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*-------------下半屏显示图形--------------*/ void img_disp1 (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*--------------显示点阵----------------*/void lat_disp (uchar data1,uchar data2) {uchar i,j,k,x;x=x1;for(k=0;k<2;k++){for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data1);}for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2+1);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data2);wr_lcd (dat,data2);}}x=x2;}wr_lcd (comm,0x36);}/*-----------------------------------------------*///当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) {uchar i,j;for(j=0;j<yl;j++){for(i=0;i<xl;i++){wr_lcd (comm,0x34);wr_lcd (comm,y0+j);wr_lcd (comm,x0+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);}}wr_lcd (comm,0x36);}/*--------------清DDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);}/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content) {chk_busy ();if(dat_comm){rs=1; //datarw=0; //write}else{rs=0; //commandrw=0; //write}P2=content; //output data or comme=1;;e=0;}void chk_busy (void){P2=0xff;rs=0;rw=1;e =1;while(busy==1);e =0;}void delay (uint us) //delay time{while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)delay(1);}/*------------------主程序--------------------*/void main (){SP=0x5f;init_lcd ();while (1){lat_disp (0x00,0x00);chn_disp (tab1);con_disp (0xff,0xff,0x8c,0x80,2,16);delay1 (28000);clrram();lat_disp (0xcc,0xcc);delay1 (28000);lat_disp (0x00,0x00);chn_disp1 (tab31);img_disp1 (tab32);delay1 (28000);clrram();lat_disp (0xff,0x00);delay1 (28000);img_disp (tab5);delay1 (28000);}}。

12864程序

12864程序

include<reg52.h>#include <math.h>void lcd_init(void);void clr_lcd(void);void send_com(unsigned char cmd);void send_data(unsigned char dat);void chek_busy(void);void set_xy(unsigned char xpos,unsigned char ypos);void print(unsigned char x,unsigned char y,char* str);void printstr(unsigned char xpos,unsigned char ypos,unsigned charstr[],unsigned char k);unsigned char code buf[4] ={0xbb,0xb6,0xd3,0xad};//欢迎#define DATA P2#define CONTROL P0#define E 7 //并行的使能信号 sbit E = P0^7#define RW 6 //并行的读写信号 sbit RW = P0^6#define RS 5 //并行的指令数据选择信号 sbit RS = P0^5#define PSB 4 //并/串行接口选择 sbit PSB = P0^4#define RST 3 //复位低电平有效 sbit RST = P0^3#define SETB(x,y) (x|=(1<<y))#define CLRB(x,y) (x&=(~(1<<y)))#define CHKB(x,y) (x&(1<<y))/********************测忙碌**********************///测忙碌子程序//RS=0,RW=1,E=H,D0-D7=状态字/************************************************/void chek_busy(void){ unsigned char temp1;//状态信息(判断是否忙)CLRB(CONTROL,RS); // RS = 0;SETB(CONTROL,RW); // RW = 1;SETB(CONTROL,E); // E = 1;do{temp1 = DATA;DATA=0xFF;} while(temp1&0x80);SETB(CONTROL,E); // E = 1;DATA=0xFF;}/********************写命令**********************///写命令子程序///************************************************/void send_com(unsigned char cmd)/*写命令*/{chek_busy();CLRB(CONTROL,RS); //RS = 0;CLRB(CONTROL,RW); //RW = 0;DATA = cmd;SETB(CONTROL,E); //E = 1;CLRB(CONTROL,E); //E = 0;}/********************写数据**********************///写数据子程序///************************************************/void send_data(unsigned char dat){chek_busy();SETB(CONTROL,RS); //RS = 1;CLRB(CONTROL,RW); //RW = 0;DATA = dat;SETB(CONTROL,E); //E = 1;CLRB(CONTROL,E); //E = 0;}/********************初始化**********************///复位、通讯方式选择/************************************************/void lcd_init(void){SETB(CONTROL,RST);//复位RST=1SETB(CONTROL,PSB); //通讯方式为并口PSB = 1//send_com(0x34);//34H--扩充指令操作send_com(0x30);//功能设置,一次送8位数据,基本指令集send_com(0x0C);//0000,1100 整体显示,游标off,游标位置offsend_com(0x01);//0000,0001 清DDRAMsend_com(0x02);//0000,0010 DDRAM地址归位send_com(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC }/*******************************************************************/ // 设置显示位置 xpos(1~16),tpos(1~4)/*******************************************************************/ void set_xy(unsigned char xpos,unsigned char ypos){switch(ypos){case 1:send_com(0X80|xpos);break;case 2:send_com(0X90|xpos);break;case 3:send_com(0X88|xpos);break;case 4:send_com(0X98|xpos);break;default:break;}}/*******************************************************************/ // 在指定位置显示字符串/*******************************************************************/ void print(unsigned char x,unsigned char y,char* str){unsigned char lcd_temp;set_xy(x,y);lcd_temp=*str;while(lcd_temp != 0x00){send_data(lcd_temp);lcd_temp=*(++str);}}/********************写字符串******************///写字符串子程序//xpos1取0~7共八列,ypos1取0~3共四行。

12864接口程序

12864接口程序

12864接口程序(MCS51模拟口线方式)--------------------------------------------------------------------------------连线图: *LCM---8031* *LCM---8031* *LCM------------8031* *LCM----------8031*; *DB0---P1.0* *DB4---P1.4* *RS-------------P3.0* *CS1----------P3.4* ; *DB1---P1.1* *DB5---P1.5* *RW-------------P3.1* *CS2----------P3.5*; *DB2---P1.2* *DB6---P1.6* *E--------------P3.3; *DB3---P1.3* *DB7---P1.7* */RST-----------VDD (详见说明书);注:8031的晶振频率为12MHz;************************************************************* *************XPOS EQU 20H ;列方向地址指针(用于LCDPOS子程序)YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序)RSPIN EQU P3.0 ;RWPIN EQU P3.1 ;EPIN EQU P3.3 ;CS1PIN EQU P3.4 ;CS2PIN EQU P3.5 ;ORG 0000HJMP STARTSTART: MOV SP,#60HMAIN:CALL LCDRESETMOV A,#55HCALL LCDFILLMOV DPTR,#STRING1CALL PUTSTRCALL PUTSTRJMP MAINDELAY400MS:MOV R0,#20 ;延时子程序(400MS)DL4_PA: MOV R1,#100DL4_PB: MOV R2,#100DJNZ R2,$DJNZ R1,DL4_PBDJNZ R0,DL4_PARETDELAY:MOV R6,#2DLY_PA: MOV R5,#0DLY_PB: MOV R4,#0DJNZ R4,$DJNZ R5,DLY_PB DJNZ R6,DLY_PA RET GETSTRCHAR: GSC_PA:CLR AMOVC A,@A+DPTR INC DPTRMOV B,AINC ACLR CJZ GSC_LAXCLR AMOVC A,@A+DPTR INC DPTRSETB CGSC_LAX:RETPUTSTR:CALL DELAYCALL GETSTRCHAR PUSH DPLPUSH DPHJNC PSR_LAXJNB B.7,PSR_LBY ;CHINESE:CALL HZKPOS CALL PUTCHARDOT CALL PUTCHARDOT JMP PSR_LBXPSR_LBY:;ENGLISH:CALL HZKPOS CALL PUTCHARDOT PSR_LBX:POP DPHPOP DPLJMP PUTSTRPSR_LAX:POP DPH POP DPLRET PUTCHARDOT: MOV R7,#8PAC_PA:CLR AMOVC A,@A+DPTRCALL LCDWRITEINC YPOSINC DPTRCLR AMOVC A,@A+DPTRCALL LCDWRITEDEC YPOSINC DPTRCALL CUSORNEXTMOV A,XPOSJNZ PAC_LAXINC YPOSPAC_LAX:DJNZ R7,PAC_PARETHZKPOS:MOV R2,#5HTP_PA:CLR CRLC AXCH A,BRLC AXCH A,BDJNZ R2,HTP_PAMOV DPTR,#HZKDOTADD A,DPLMOV DPL,AMOV A,BADDC A,DPHMOV DPH,ARETLCDFILL: ;LCD整屏显示A的内容 MOV R7,AMOV YPOS,#0LFL_PB: MOV XPOS,#0LFL_PA: MOV A,R7CALL LCDWRITE ;定位并写数据CALL CUSORNEXTMOV A,XPOSJNZ LFL_PA ;XPOS<128则循环(128列)MOV A,YPOSJNZ LFL_PB ;YPOS<8则循环(8页)RETLCDWRITE: ;定位并写数据子程序CALL LCDPOS ;内部写数指针定位CALL LCDWD ;写数据RETCUSORNEXT:ANL YPOS,#7INC XPOSMOV A,XPOSJNB ACC.7,CNT_LAXMOV XPOS,#0INC YPOSMOV A,YPOSANL A,#0F8HJZ CNT_LAXMOV YPOS,#0CNT_LAX:RETLCDPOS: ;内部写数指针定位子程序PUSH ACCMOV A,XPOSJB ACC.6,LPS_LAYMOV A,YPOS ;XPOS列方向小于64则对CS1操作ANL A,#07HADD A,#0B8HCALL LCDWC1 ;设页码MOV A,XPOSANL A,#3FHORL A,#40HCALL LCDWC1 ;设列码JMP LPS_LAXLPS_LAY:MOV A,YPOS ;XPOS列方向大于等于64则对CS2操作 ANL A,#07HADD A,#0B8HCALL LCDWC2 ;设页码MOV A,XPOSANL A,#3FHORL A,#40HCALL LCDWC2 ;设列码LPS_LAX:POP ACCRETLCDWD: ;送数据子程序MOV B,AMOV A,XPOSJB ACC.6,LWD_LAYMOV A,B ;XPOS列方向小于64则对CS1操作CALL LCDWD1JMP LWD_LAXLWD_LAY:MOV A,B ;XPOS列方向大于等于64则对CS2操作 CALL LCDWD2LWD_LAX:RETLCDRESET: ;LCD控制器复位MOV A,#3FH ;打开LCD显示CALL LCDWC1CALL LCDWC2MOV A,#0C0H ;设显示起始行CALL LCDWC1CALL LCDWC2RETLCDWC1: ;送片1控制字子程序CALL WAITIDLE1MOV P1,ACLR RSPIN ;RS=0 RW=0 CS1=1 E=高脉冲CLR RWPINSETB CS1PINSETB EPINNOPCLR EPINCLR CS1PINRETLCDWC2: ;送片2控制字子程序CALL WAITIDLE2MOV P1,ACLR RSPIN ;RS=0 RW=0 CS2=1 E=高脉冲CLR RWPINSETB CS2PINSETB EPINNOPCLR EPINCLR CS2PINRETLCDWD1: ;片1写数据子程序CALL WAITIDLE1MOV P1,ASETB RSPIN ;RS=1 RW=0 CS1=1 E=高脉冲CLR RWPINSETB CS1PINSETB EPINNOPCLR EPINCLR CS1PINRETLCDWD2: ;片2写数据子程序CALL WAITIDLE2MOV P1,ASETB RSPIN ;RS=1 RW=0 CS2=1 E=高脉冲 CLR RWPINSETB CS2PINSETB EPINNOPCLR EPINCLR CS2PINRETLCDRD1: ;片1读数据子程序CALL WAITIDLE1MOV P1,#0FFHSETB RSPIN ;RS=1 RW=1 CS1=1 E=高电平 SETB RWPINSETB CS1PINSETB EPINNOPMOV A,P1CLR EPINCLR CS1PINRETLCDRD2: ;片2读数据子程序CALL WAITIDLE2MOV P1,#0FFHSETB RSPIN ;RS=1 RW=1 CS1=2 E=高电平 SETB RWPINSETB CS2PINSETB EPINNOPMOV A,P1CLR EPINCLR CS2PINRETWAITIDLE1:MOV P1,#0FFHCLR RSPIN ;RS=0 RW=1 CS1=1 E=高电平SETB RWPINSETB CS1PINSETB EPINWT1_PA: NOPJB P1.7,WT1_PACLR EPINCLR CS1PINRETWAITIDLE2:CLR RSPIN ;RS=0 RW=1 CS2=1 E=高电平SETB RWPINSETB CS2PINSETB EPINWT2_PA: NOPJB P1.7,WT2_PACLR EPINCLR CS2PINRETHZKDOT:;(d3d0H)(有)(8000)DB 04H, 04H, 04H, 02H, 04H, 01H, 84H, 00HDB 0e4H,0ffH, 3cH, 09H, 27H, 09H, 24H, 09HDB 24H, 09H, 24H, 49H, 24H, 89H,0f4H, 7fHDB 24H, 00H, 06H, 00H, 04H, 00H, 00H, 00H;(cfdeH)(限)(8001)DB 00H, 00H,0feH,0ffH, 02H, 08H, 22H, 10HDB 0daH, 08H, 06H, 07H, 00H, 00H,0feH,0ffHDB 92H, 42H, 92H, 24H, 92H, 08H, 92H, 14HDB 0ffH, 22H, 02H, 61H, 00H, 20H, 00H, 00H;(b9abH)(公)(8002)DB 00H, 01H, 00H, 01H, 80H, 00H, 40H, 30HDB 30H, 28H, 0cH, 24H, 00H, 23H,0c0H, 20HDB 06H, 20H, 18H, 28H, 20H, 30H, 40H, 60HDB 80H, 00H, 80H, 01H, 80H, 00H, 00H, 00H;(cbbeH)(司)(8003)DB 10H, 00H, 10H, 00H, 92H, 3fH, 92H, 10HDB 92H, 10H, 92H, 10H, 92H, 10H, 92H, 10HDB 0d2H, 3fH, 9aH, 00H, 12H, 40H, 02H, 80HDB 0ffH, 7fH, 02H, 00H, 00H, 00H, 00H, 00HSTRING1: DB 80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,0ffHSTRING2: DB 80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,80H, 00H, 80H, 01H, 80H, 02H, 80H, 03H,0ffH。

12864液晶测试程序.c

12864液晶测试程序.c

12864液晶测试程序.c#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define LCD12864_DB P0sbit rs = P1^0;sbit rw = P1^1;sbit e = P1^5;void delay_50ms(uint t);void write_12864com(uchar com);void write_12864dat(uchar dat);void LcdSetCursor(unsigned char x, unsigned char y);void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void initinal(void); //初始化液晶//************************************//主程序//*************************************void main(void){unsigned char str[] = "zuan zhu";initinal();LcdShowStr(0, 0, str);LcdShowStr(4, 0,":");LcdShowStr(0, 1, "youwen");LcdShowStr(4, 1,":");LcdShowStr(0, 2,"杭州之行东川有感");LcdShowStr(0, 3,"身体是革命的本钱");LcdShowStr(5, 0,"137051");while (1);}/* 等待液晶准备好*/void LcdWaitReady(){unsigned char sta;LCD12864_DB = 0xFF;rs = 0;rw = 1;do {e = 1;sta = LCD12864_DB; //读取状态字e = 0;} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}//********************************//对液晶写指令//*****************************void write_12864com(uchar com){LcdWaitReady();rw=0;rs=0;delay_50ms(1);P0=com;e=1;delay_50ms(10);e=0;delay_50ms(2);}//***********************************//对液晶写数据//content为要写入的数据//***********************************void write_12864dat(uchar dat){LcdWaitReady();rw=0;rs=1;delay_50ms(1);P0=dat;e=1;delay_50ms(10);e=0;delay_50ms(2);}//**********************************//液晶初始化//**********************************void initinal(void){delay_50ms(2);write_12864com(0x30);delay_50ms(4);write_12864com(0x30);delay_50ms(4);write_12864com(0x0f);delay_50ms(4);write_12864com(0x01);delay_50ms(240);write_12864com(0x06);delay_50ms(10);}/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/ void LcdSetCursor(unsigned char x, unsigned char y){unsigned char addr;if (y == 0) //由输入的屏幕坐标计算显示RAM的地址addr = 0x80 + x; //第一行字符地址从0x00起始else if (y == 1) //由输入的屏幕坐标计算显示RAM的地址addr = 0x90 + x; //第二行字符地址从0x90起始else if (y == 2) //由输入的屏幕坐标计算显示RAM的地址addr = 0x88 + x; //第三行字符地址从0x90起始else if (y == 3) //由输入的屏幕坐标计算显示RAM的地址addr = 0x98 + x; //第四行字符地址从0x90起始write_12864com(addr | 0x80); //设置RAM地址}/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){LcdSetCursor(x, y); //设置起始地址while (*str != '\0') //连续写入字符串数据,直到检测到结束符{write_12864dat(*str++); //先取str指向的数据,然后str自加1 }}//************************************************//延时子程序模块12MHz的晶振频率//********************************************** void delay_50ms(uint t){uchar j;for(;t>0;t--){for(j=6246;j>0;j--); //50ms延时.}}。

12864串口测试程序

12864串口测试程序

#include <reg51.h>#include <intrins.h>typedef unsigned char u8;typedef unsigned int u16;typedef unsigned long u32;#define uchar unsigned char#define uint unsigned int#define nop _nop_()#define xtal 11.0592 //11.0592M//==========================================================//函数声明void Delay(uint ms); //延时子程序sfr INT_CLKO = 0x8F;sfr WDT_CONTR = 0xC1; //看门狗sfr P4 = 0xC0;sfr P5 = 0xC8;sfr P6 = 0xE8;sfr P7 = 0xF8;sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain sfr P0M1 = 0x93;sfr P0M0 = 0x94;sfr P2M1 = 0x95;sfr P2M0 = 0x96;sfr P3M1 = 0xB1;sfr P3M0 = 0xB2;sfr P4M1 = 0xB3;sfr P4M0 = 0xB4;sfr P5M1 = 0xC9;sfr P5M0 = 0xCA;sfr P6M1 = 0xCB;sfr P6M0 = 0xCC;sfr P7M1 = 0xE1;sfr P7M0 = 0xE2;sfr P1ASF = 0x9D; //只写,模拟输入(AD或LVD)选择sfr ADC_CONTR = 0xBC; //带AD系列sfr AUXR = 0x8E;sbit CS= P4^3; //CS=RSsbit SID = P3^6; //RW=SIDsbit SCLK =P3^4; //E=SCLK//==========================================================/********** 12864LCD引脚定义**********//* sbit CS = P4^3; //4脚--VCC, 片选高电平有效单片LCD使用时可固定高电平RS P4.3 CS = P3^5;sbit SID = P3^6; //5脚,数据WR(SID) P4.5 SID = P3^6;sbit SCLK = P3^4; //6脚,时钟E(CLK) P4.6 SCLK = P3^4;sbit PSB = P3^7; //15脚--GND,低电平时表示用串口驱动,可固定低电平//sbit RESET = P2^5; //LCD复位,LCD模块自带复位电路。

最完整的12864测试程序

最完整的12864测试程序

以下是RT12864引脚功能定义 引脚号管脚 说明 1Vss 电源地(0V)。

2VDD 电源正(+5V)。

3V0 LCD 驱动电压,应用时在VEE 与V0之间加一20K 可调电阻。

4 D/I 数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。

5 R/W 读\写选择:高电平:读数据;低电平:写数据。

6 E 读写使能,高电平有效,下降沿锁定数据。

7 DB0数据输入输出。

8 DB1 9 DB2 10DB3 11DB4 12DB5 13DB6 14DB7 15CS1 片选择信号,低电平时选择前64列。

16CS2 片选择信号,低电平时选择后64列。

17RET 复位信号,低电平有效。

18VOUT LCD 驱动电源(-10V )。

19LED+ 背光电源,LED+(+5V)。

20LED- 背光电源,LED-(0V)。

以下是RT12864引脚功能定义引脚号管脚说明1Vss电源地(0V)。

2VDD电源正(+5V)。

3V0LCD驱动电压,应用时在VEE与V0之间加一20K可调电阻。

4D/I数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。

5R/W读\写选择:高电平:读数据;低电平:写数据。

6E读写使能,高电平有效,下降沿锁定数据。

7DB0数据输入输出。

8DB19DB210DB311DB412DB513DB614DB715CS1片选择信号,低电平时选择前64列。

16CS2片选择信号,低电平时选择后64列。

17RET复位信号,低电平有效。

18VOUTLCD驱动电源(-10V )。

19LED+背光电源,LED+(+5V)。

20LED-背光电源,LED-(0V)。

/********************************************/ /* 12864系列测试程序*//********************************************/ #include <reg51.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <math.h>/* LCD寄存器命令代码*/#define Disp_On 0x3f#define Disp_Off 0x3e#define Col_Add 0x40#define Page_Add 0xb8 //每页是8行#define Start_Line 0xc0//LCD和51连接#define Lcd_Bus P0 //MCU P1<------> LCMsbit Mcs=P2^6; //Master chip enablesbit Scs=P2^5; //Slave chip enablesbit Enable=P3^7; //mode Enable singlesbit Di=P2^4; //Data or Instrument Selectsbit RW=P2^3; //Write or Readsbit Lcd_Rst=P1^0; //Lcm resetchar code HANZI[7][32]={{0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00},//"电"{0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00},//"流"{0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00},//"压"{0x00,0xFF,0x11,0x29,0xC7,0x01,0xFE,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x00,0xFF,0x02,0x04,0x43,0x40,0x7F,0x42,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00},//"阻"{0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00},//温{0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00},//度{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00} //力};char code shu[14][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//"0" {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//"1" {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//"2" {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//"3" {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//"4" {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//"5" {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//"6" {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//"7" {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//"8" {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//"9" {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//"+"{0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"-" {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//"." {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00}//"v"};/*------------------延时子程序-----------------------------*/void delay(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}/**********************************************************************数原型:void write_com(unsigned char cmdcode)入口参数: cmdcode 写入的命令出口参数: 无返回值:无说明:写命令到LCD**********************************************************************/void write_com(unsigned char cmdcode){Di=0;RW=0;Lcd_Bus=cmdcode;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:void write_data(unsigned char Dispdata)入口参数: Dispdata 写入的数据出口参数: 无返回值:无说明:写数据到LCD**********************************************************************/void write_data(unsigned char Dispdata){Di=1;RW=0;Lcd_Bus=Dispdata;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:Clr_Scr()入口参数: 无出口参数: 无返回值:无说明:清除显示内存**********************************************************************/void Clr_Scr(){unsigned char j,k;Mcs=1;Scs=1;write_com(Page_Add+0);write_com(Col_Add+0);for(k=0;k<8;k++){ write_com(Page_Add+k);for(j=0;j<64;j++)write_data(0x00);}}/**********************************************************************数原型:DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH)入口参数: CharType: 显示的字符类型1:16x16汉字2:8x16 字符3: 4x16pag :显示在第几行;col :显示在第几列;MH : 显示的内容代码;出口参数: 无返回值:无说明:在指定的行列显示字符,可以跨区域显示**********************************************************************/void DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH){ unsigned char tcol,j=0,i=0;unsigned char twidth,tpag;tpag=pag;if (CharType==1){tcol=48; // 16*16 汉字twidth=16;}if (CharType==2){tcol=56; // 8*16 字符twidth=8;}if (col<=tcol) //1区够显示{ Mcs=1;Scs=0;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if (col>=64) //0区够显示{ Mcs=0;Scs=1;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col-64);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if ((col>tcol)&&(col<64)) //介于1,0区之间显示{for(j=0;j<2;j++){ Mcs=1;Scs=0;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<(64-col);i++) write_data(MH[twidth*j+i]);Mcs=0;Scs=1;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+0);for(i=(64-col);i<twidth;i++) write_data(MH[twidth*j+i]);}}}/********************************************************************** 数原型:void DISP_float(unsigned char pag,unsigned char col, float fData)入口参数: pag :显示在第几行;col :显示在第几列;fData : 显示的数据;出口参数: 无返回值:无说明:在指定的行列上显示数据,可以跨区域显示**********************************************************************/ void DISP_float(unsigned char pag,unsigned char col, float fData){ unsigned long int tData;unsigned char wei,i,j,tbit,fuhao,dai;unsigned char wei_shu[5];if (fData>0)fuhao=1;elsefuhao=0;if ((fData<1) &&(fData>-1))dai=1;elsedai=0;tData=(unsigned int)(abs(fData*10));if (tData<=9) wei=1;if ((tData>9) && (tData<=99)) wei=2;if ((tData>99) && (tData<=999)) wei=3;if ((tData>999) && (tData<=9999)) wei=4;if ((tData>9999) && (tData<=99999)) wei=5;for(i=wei;i>=1;i--){ tbit=tData%10;wei_shu[i-1]=tbit;tData/=10;}if (fuhao==0) //显示0>x{DispChart(2,pag,col,shu[11]);if (dai==1) //显示0>x>-1{DispChart(2,pag,col+8,shu[0]); DispChart(2,pag,col+16,shu[12]);j=3;}else j=1;}elseif (fuhao==1)//显示x>0{if (dai==1)//显示1>x>0{DispChart(2,pag,col,shu[0]);DispChart(2,pag,col+8,shu[12]);j=2;}else j=0;}for (i=0;i<wei;i++){ DispChart(2,pag,col+j*8,shu[wei_shu[i]]);if ((i==(wei-1))&&(dai==0)){DispChart(2,pag,col+j*8,shu[12]); DispChart(2,pag,col+(j+1)*8,shu[wei_shu[i]]); goto bbreak;}j=j+1;}bbreak:;}/********************************************************************** 数原型:void init_lcd()入口参数: 无出口参数: 无返回值:无说明:初始化LCD屏**********************************************************************/ void init_lcd(){Lcd_Rst=0;delay(100);Lcd_Rst=1;delay(100);Mcs=1; Scs=1;delay(100);write_com(Disp_Off);write_com(Page_Add+0);write_com(Start_Line+0);write_com(Col_Add+0);write_com(Disp_On);}//主程序main(){unsigned char i=0;float ff;init_lcd();Clr_Scr();ff=-0.9;// ff=0.4;//ff=2121.4;//ff=-1452;DISP_float(0,55,ff);while(1){ DispChart(1,2,0,HANZI[4]);DispChart(1,2,15+10,HANZI[0]); DispChart(1,2,31+10,HANZI[1]);DispChart(2,2,47+10,shu[8]); DispChart(2,2,55+10,shu[4]);DispChart(2,2,63+10,shu[2]); DispChart(2,2,71+10,shu[4]);DispChart(2,2,79+10,shu[1]);DispChart(2,2,87+10,shu[0]); delay(1000);}}。

关于12864制作一个秒表程序

关于12864制作一个秒表程序
2. 打开一张图片,注意图片的格式需为 128*64 点阵,BMP 单色位图格式,可以先用画图程序对图片进行编辑。
3.设置参数:取模方式为 C51。
将取出的代码保存,并且复制到程序的“请输入图形代码” 函数内部。
4.示范程序:
#include<reg52.h> //载入 52 单片机函数库
#include<intrins.h> //载入位移动函数库
0x3F,0xFF,0xFF,0xFF,0x8F,0xFC,0x63,0xE6,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00, 0x7F,0xC1,0xFF,0xFF,0xEF,0xF8,0xFF,0xC6,0x0F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00, 0x7E,0x03,0xFF,0xC0,0x7F,0xE3,0xFF,0xF6,0x0F,0xFF,0xC0,0x3F,0xF0,0x00,0x00,0x00, 0x7C,0x0F,0xFF,0xC0,0x3C,0x7F,0x00,0x7F,0x0F,0xFC,0x00,0x07,0xFC,0x00,0x00,0x00, 0xFC,0x3F,0xFF,0xE0,0x10,0x3C,0x01,0xFF,0x8F,0x80,0x00,0x00,0xFE,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xE0,0x00,0x38,0x0F,0x01,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xC0,0x00,0x18,0x70,0x00,0x06,0x00,0x00,0x00,0x7F,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0x80,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00, 0x7F,0xFF,0xFE,0x00,0x00,0x00,0x0F,0x80,0x00,0x10,0x00,0x00,0x70,0x00,0x00,0x00, 0x7F,0xFF,0xF8,0x00,0x00,0x00,0x1F,0xE0,0x00,0x30,0x00,0x20,0x70,0x00,0x00,0x00, 0x3F,0xFF,0xE0,0x00,0x00,0x00,0x3C,0x20,0x00,0x70,0x02,0x30,0x70,0x00,0x00,0x00, 0x1F,0xFF,0xC0,0x00,0x00,0x00,0x0C,0x00,0x01,0xE0,0x07,0x60,0x70,0x00,0x00,0x00, 0x1F,0xFF,0x80,0x00,0x00,0x00,0x0C,0x00,0x07,0x80,0x07,0xC0,0x70,0x00,0x00,0x00, 0x0F,0xFF,0x00,0x00,0x00,0x00,0x0E,0x00,0x1E,0x00,0x0F,0xC8,0x60,0x00,0x00,0x00, 0x03,0xFE,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x0D,0x88,0xE0,0x00,0x00,0x00, 0x00,0x7E,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x18,0x09,0xE0,0x00,0x00,0x00, 0x00,0x1E,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x18,0x1F,0xC0,0x00,0x00,0x00, 0x00,0x0F,0xE0,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x30,0x3F,0x80,0x00,0x00,0x00, 0x00,0x03,0xFE,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x70,0x3F,0x00,0x00,0x00,0x00, 0x00,0x00,0xFF,0x80,0x00,0x01,0xFF,0xE1,0xC0,0x00,0x60,0x70,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0xE0,0x00,0x03,0x9F,0xB3,0xC0,0x00,0xC4,0xE0,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xF0,0x00,0x07,0x9F,0x9B,0xC0,0x01,0x8F,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xF8,0x00,0x0F,0x1F,0x9E,0xC0,0x03,0x1F,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0xF0,0x3E,0x00,0x1F,0x9D,0x0E,0xC0,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LJMP MAINORG 0003HLJMP INTORG 0100HCOMMAND EQU 30HDATA1 EQU 31HDATA2 EQU 32HDATA3 EQU 33HRS EQU P3.1RW EQU P3.4E EQU P3.5;********延时程序************************** DELAY:MOV R6,#00HMOV R7,#00HDELAY1:NOPDJNZ R7,DELAY1DJNZ R6,DELAY1RET;********读BF和AC值************************ PR0:PUSH ACCMOV P1,#0FFHCLR RSSETB RWSETB EMOV COMMAND,P1CLR EPOP ACCRET;*********写指令代码************************PR1:PUSH ACCCLR RSSETB RWPR11:MOV P1,#0FFHSETB EMOV A,P1CLR EJB ACC.7,PR11CLR RWMOV P1,COMMANDCLR EPOP ACCRET;*********写显示数据************************ PR2:PUSH ACCCLR RSSETB RWPR21:MOV P1,#0FFHSETB EMOV A,P1CLR EJB ACC.7,PR21SETB RSCLR RWMOV P1,DATA1SETB ECLR EPOP ACCRET;*********读显示数据************************ PR3:PUSH ACCCLR RSSETB RWPR31:MOV P1,#0FFHSETB EMOV A,P1CLR EJB ACC.7,PR31SETB RSSETB RWMOV P1,#0FFHSETB EMOV COMMAND,P1CLR EPOP ACCRET;************写CGROM************************* CG:LCALL PR1MOV R0,#8铿学电子嵌入式,单片机培训 www.kengxue.comCG1:MOV DATA1,DATA3LCALL PR2LCALL PR2MOV DATA1,DATA2LCALL PR2LCALL PR2DJNZ R0,CG1RET;***********写DDRAM*************************DD:LCALL PR1MOV R0,#8MM: MOV DATA1,#00HLCALL PR2MOV DATA1,DATA2LCALL PR2DJNZ R0,MMRET;****************************************INT:PUSH ACCPUSH DPHPUSH DPLPUSH PSWCLR EX0JNB P3.2,$JB P3.2,$JNB P3.2,$SETB EX0CLR IE0POP PSWPOP DPLPOP DPHPOP ACCRETI;**********主程序****************************MAIN:MOV SP,#60HSETB EASETB EX0SETB IT0MOV COMMAND,#30HCLR RS铿学电子嵌入式,单片机培训 www.kengxue.comSETB RWMOV P1,#0FFHSETB EMOV A,COMMANDMOV A,P1CLR ELCALL DELAYMOV COMMAND,#30HCLR RSSETB RWMOV P1,#0FFHSETB EMOV A,COMMANDMOV A,P1CLR ELCALL DELAYMOV COMMAND,#30H ;功能设置 8位数据,基本指令LCALL PR1MOV COMMAND,#0CH ;显示状态 ON,游标OFF,反白OFFLCALL PR1MOV COMMAND,#01H ;清除显示LCALL PR1MOV COMMAND,#02H ;地址归位LCALL PR1MOV COMMAND,#80H ;设置DDRAM地址LCALL PR1LCALL DELAYMOV R0,#10H ;显示HCGROMMOV DATA1,#02HL: LCALL PR2INC DATA1DJNZ R0,LMOV COMMAND,#90HLCALL PR1MOV DATA1,#41HMOV R0,#10HL1: LCALL PR2INC DATA1DJNZ R0,L1MOV COMMAND,#88HLCALL PR1MOV DATA1,#51HMOV R0,#10H铿学电子嵌入式,单片机培训 www.kengxue.comL2: LCALL PR2INC DATA1DJNZ R0,L2MOV COMMAND,#98HLCALL PR1MOV DATA1,#61HMOV R0,#10HL3: LCALL PR2INC DATA1DJNZ R0,L3LCALL DELAYLCALL DELAYLCALL DELAY;*************写CGRAM***************************MOV COMMAND,#40HMOV DATA3,#0FFHMOV DATA2,#00HLCALL CGMOV COMMAND,#50HMOV DATA3,#00HMOV DATA2,#0FFHLCALL CGMOV COMMAND,#60HMOV DATA3,#0AAHMOV DATA2,#0AAHLCALL CGMOV COMMAND,#70HMOV DATA3,#55HMOV DATA2,#55HLCALL CGMOV COMMAND,#80HMOV DATA2,#00HLCALL DDMOV COMMAND,#90HMOV DATA2,#00HLCALL DD铿学电子嵌入式,单片机培训 www.kengxue.comMOV COMMAND,#88HMOV DATA2,#00HLCALL DDMOV COMMAND,#98HMOV DATA2,#00HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#80HMOV DATA2,#02HLCALL DDMOV COMMAND,#90HMOV DATA2,#02HLCALL DDMOV COMMAND,#88HMOV DATA2,#02HLCALL DDMOV COMMAND,#98HMOV DATA2,#02HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#80HMOV DATA2,#04HLCALL DDMOV COMMAND,#90HMOV DATA2,#04HLCALL DDMOV COMMAND,#88HMOV DATA2,#04HLCALL DDMOV COMMAND,#98HMOV DATA2,#04HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#80HMOV DATA2,#06H铿学电子嵌入式,单片机培训 www.kengxue.comLCALL DDMOV COMMAND,#90HMOV DATA2,#06HLCALL DDMOV COMMAND,#88HMOV DATA2,#06HLCALL DDMOV COMMAND,#98HMOV DATA2,#06HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#40HMOV DATA3,#0AAHMOV DATA2,#55HLCALL CGMOV COMMAND,#50HMOV DATA3,#55HMOV DATA2,#0AAHLCALL CGMOV COMMAND,#60HMOV DATA3,#0FFHMOV DATA2,#0FFHLCALL CGMOV COMMAND,#80HMOV DATA2,#00HLCALL DDMOV COMMAND,#90HMOV DATA2,#00HLCALL DDMOV COMMAND,#88HMOV DATA2,#00HLCALL DDMOV COMMAND,#98HMOV DATA2,#00HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#80H铿学电子嵌入式,单片机培训 www.kengxue.comMOV DATA2,#02HLCALL DDMOV COMMAND,#90HMOV DATA2,#02HLCALL DDMOV COMMAND,#88HMOV DATA2,#02HLCALL DDMOV COMMAND,#98HMOV DATA2,#02HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#80HMOV DATA2,#04HLCALL DDMOV COMMAND,#90HMOV DATA2,#04HLCALL DDMOV COMMAND,#88HMOV DATA2,#04HLCALL DDMOV COMMAND,#98HMOV DATA2,#04HLCALL DDLCALL DELAYLCALL DELAYLCALL DELAYMOV COMMAND,#01HLCALL PR1MOV COMMAND,#80HLCALL PR1MOV DPTR,#CHINESE1MOV R0,#10HCHINA1:CLR AMOVC A,@A+DPTRMOV DATA1,ALCALL PR2铿学电子嵌入式,单片机培训 www.kengxue.comINC DPTRDJNZ R0,CHINA1MOV COMMAND,#90HLCALL PR1MOV DPTR,#CHINESE2MOV R0,#10HCHINA2:CLR AMOVC A,@A+DPTRMOV DATA1,ALCALL PR2INC DPTRDJNZ R0,CHINA2MOV COMMAND,#88HLCALL PR1MOV DPTR,#CHINESE3MOV R0,#10HCHINA3:CLR AMOVC A,@A+DPTRMOV DATA1,ALCALL PR2INC DPTRDJNZ R0,CHINA3MOV COMMAND,#98HLCALL PR1MOV DPTR,#CHINESE4MOV R0,#10HCHINA4:CLR AMOVC A,@A+DPTRMOV DATA1,ALCALL PR2INC DPTRDJNZ R0,CHINA4LCALL DELAYLCALL DELAYLCALL DELAYLJMP MAIN铿学电子嵌入式,单片机培训 www.kengxue.comCHINESE1:DB 0C3H,0C0H,0CAH,0D3H,0D2H,0BAH,0BEH,0A7H,0D3H,0C3H,0D0H,0C4H,0D6H,0C6H,0D4H,0ECHCHINESE2:DB 0C3H,0C0H,0CAH,0D3H,0CAH,0B5H,0D2H,0B5H,0D3H,0D0H,0CFH,0DEH,0B9H,0ABH,0CBH,0BEHCHINESE3:DB 0C3H,0C0H,0CAH,0D3H,0D2H,0BAH,0BEH,0A7H,0D3H,0C3H,0D0H,0C4H,0D6H,0C6H,0D4H,0ECHCHINESE4:DB 0C3H,0C0H,0CAH,0D3H,0CAH,0B5H,0D2H,0B5H,0D3H,0D0H,0CFH,0DEH,0B9H,0ABH,0CBH,0BEHEND。

相关文档
最新文档