With a 595 shift register shifting one wire lcd.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers 1wire_lcd.cpp Source File

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