#define TEST 2 #include<reg51.h> //#include"delay.h" #if TEST==1 //using bit banging method to write #include"74hc595.h" #endif #if TEST==2 //using UARTMode_0 for write #include"uartmode_0.h" #include"utility.h" #endif //#include"lcd8.h" ////////////////lcd8///////// #define lcd_data P0 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; void write_lcd(unsigned char c) { #if TEST==1 write_74hc595(c); #endif; #if TEST==2 rev_bits2(c); uart_tx(x); #endif RW=0; EN=1; EN=0; //delay_ms(2); } void cmd_lcd(unsigned char cmd) { RS=0; write_lcd(cmd); } void disp_lcd(unsigned char c) { RS=1; write_lcd(c); } void init_lcd(void) { cmd_lcd(0x01); cmd_lcd(0x02); cmd_lcd(0x06); cmd_lcd(0x0e); cmd_lcd(0x38); cmd_lcd(0x80); } void str_lcd(char *s) { while(*s) disp_lcd(*s++); } void int_lcd(unsigned int n) { char a[5]={0},i=0; if(n==0) { disp_lcd('0'); return; } else { while(n>0) { a[i++]=((n%10)+48); n=n/10; } for(--i;i>=0;i--) { disp_lcd(a[i]); } } } void float_lcd(float f) { int i; unsigned char j; i=f; int_lcd(i); disp_lcd('.'); for(j=0;j<3;j++) { f=(f-i)*10; i=f; int_lcd(i); } } ///////////////////////bit banging and uart mode0 method to write////////// main() { #if TEST==2 init_uart(); #endif init_lcd(); disp_lcd('B'); cmd_lcd(0xc0); str_lcd("serial lcd"); while(1); }
74hc595.h
#ifndef _74hc595_h_ #define _74hc595_h_ sbit ds=p3^0; //connect to serial input pin of 74hc595 sbit clk=p3^1; //connect to clock input sbit _mr=p3^2; //connect to reset input #define rst_74hc595_mr=0;_mr=1; //to reset a device //routine to convert 8bit parellel to 1bit serial msb first void write_74hc595(unsigned char dat) { unsigned char i; for(i=0;i<=7;i++) { clk=0; ds=(dat&(0x80>>1))?1:0; clk=1; `} //extra clock for moving from shift register to storage register clk=0; clk=1; //rst_74hc595 //reset shift register(optional) } #endif
delay.h
#ifndef _delay_h_ #define _delay_h_ void delay_ms(unsigned int dly) { unsigned int i; for(;dly>0;dly--) { for(i=122;i>0;i--); } } main() { delay_ms(1); while(1); } #endif