12864本来就有CS端的啊。。。 |
lxa0 发表于 2015-6-8 19:44 您好!12864怎么有CS端啊? |
admin 发表于 2015-6-8 11:59 程序上面的就是,求大神指点啊! |
P0口分时复用时 还要控制0809和12864片选( CS) |
把程序发上来看看 |
下面是我的程序: #include<reg52.h> #include<absacc.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define ADC0809 XBYTE[0xFBF8] /* 12864端口定义*/ #define LCD_data P0 //带字库液晶12864数据口 sbit LCD_RS = P2^3; //寄存器选择输入 sbit LCD_RW = P2^7; //液晶读/写控制 sbit LCD_EN = P2^6; //液晶使能控制 sbit PSB=P2^5; //并口控制 sbit RES=P2^4; sbit R=P1^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } /*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /* */ /*******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delay(1); LCD_EN = 1; delay(1); LCD_EN = 0; } /*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; _nop_(); _nop_(); LCD_EN = 1; delay(1); LCD_EN = 0; } /*******************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*******************************************************************/ void lcd_init() { P0=0xFF; delay(40); PSB=1; //并口方式。 delay(1); RES=0; delay(1); RES=1; lcd_wcmd(0x30); lcd_wcmd(0x30); lcd_wcmd(0x08); lcd_wcmd(0x10); lcd_wcmd(0x0C); //显示开,关光标 lcd_wcmd(0x01); //清除LCD的显示内容 lcd_wcmd(0x06); delay(100); LCD_EN = 0; } /*********************************************************/ /* */ /* 设定显示位置 */ /* */ /*********************************************************/ void lcd_pos(uchar X,uchar Y) { uchar pos; if (X==0) {X=0x80;} else if (X==1) {X=0x90;} else if (X==2) {X=0x88;} else if (X==3) {X=0x98;} pos = X+Y ; lcd_wcmd(pos); //显示地址 } void main() { uint adc_data; int disi,disan,dier,diyi; lcd_init(); while(1) { uchar i; R=0; //蜂鸣器 ADC0809=i; delay(1000); adc_data=ADC0809; adc_data=adc_data*19.61; disi=adc_data/1000; disan=(adc_data%1000)/100; dier=(adc_data%1000%100)/10; diyi=adc_data%1000%100%10; delay(10000); delay(10000); delay(1000); lcd_pos(0,0); lcd_wdat(disi+0x30); lcd_wdat(disan+0x30); lcd_wdat(dier+0x30); lcd_wdat(diyi+0x30); } } 求大神指点!谢谢啦~~ |