With a 595 shift register shifting one wire lcd.
Embed:
(wiki syntax)
Show/hide line numbers
1wire_lcd.cpp
00001 #include "1wire_lcd.h" 00002 #include "mbed.h" 00003 00004 DigitalOut wire(p21); 00005 00006 00007 void one_wire(unsigned char data) 00008 { 00009 char i; 00010 wire=1; 00011 for(i=0;i < 8;i++) 00012 { 00013 if((data<<(i))&0x80) 00014 { 00015 wire=0; 00016 wire=1; 00017 } 00018 else 00019 { 00020 wire=0; 00021 wait_us(15); 00022 wire=1; 00023 wait_us(30); 00024 } 00025 } 00026 wire=0; 00027 wait_us(210); 00028 wire=1; 00029 wait_us(300); 00030 } 00031 00032 00033 void lcd_putc(unsigned char c) 00034 { 00035 unsigned char data; 00036 data = 0x00; 00037 data |=0x50; 00038 one_wire(data); 00039 data |= ((c & 0xF0)>>4); 00040 one_wire(data); 00041 data &= 0x1F; 00042 one_wire(data); 00043 wait_us(100); 00044 00045 data = 0x00; 00046 data |= 0x50; 00047 one_wire(data); 00048 data |= (((c & 0x0F) << 4) >> 4); 00049 one_wire(data); 00050 data &= 0x1F; 00051 one_wire(data); 00052 wait_us(100); 00053 00054 } 00055 00056 void lcd_command(unsigned char c) 00057 { 00058 unsigned char data; 00059 data = 0x00; 00060 data |=0x40; 00061 one_wire(data); 00062 data |= ((c & 0xF0)>>4); 00063 one_wire(data); 00064 data &= 0x0F; 00065 one_wire(data); 00066 wait_us(100); 00067 00068 data = 0x00; 00069 data |= 0x40; 00070 one_wire(data); 00071 data |= (((c & 0x0F) << 4) >> 4); 00072 one_wire(data); 00073 data &= 0x0F; 00074 one_wire(data); 00075 wait_us(100); 00076 00077 } 00078 00079 void lcd_clear(void) 00080 { 00081 lcd_command(0x1); 00082 wait_ms(2); 00083 } 00084 00085 void lcd_position(unsigned char x,unsigned char y) 00086 { 00087 if(x==1) 00088 lcd_command(0x80+((y-1)%20)); 00089 else 00090 lcd_command(0xC0+((y-1)%20)); 00091 } 00092 00093 void lcd_printf(const char * a) 00094 { 00095 wait_us(100); 00096 while(*a) 00097 lcd_putc(*a++); 00098 } 00099 00100 void lcd_init() 00101 { 00102 one_wire(0); 00103 wait_ms(15); 00104 lcd_command(0x02); 00105 wait_ms(2); 00106 lcd_command(40); //2line 4bit 00107 lcd_command(6); //write right 00108 lcd_command(12); //pointer hidden 00109 lcd_clear(); 00110 00111 00112 lcd_command(128); //first line 00113 00114 } 00115 00116
Generated on Wed Jul 13 2022 09:52:32 by 1.7.2