C coded library to use 1Wire LCD

Dependencies:   mbed

This method allows you to control an lcd with a 74x595 shift register.

/media/uploads/ahmetunal/shift1.gif /media/uploads/ahmetunal/shift1b.gif /media/uploads/ahmetunal/shift1c.gif /media/uploads/ahmetunal/_scaled_one_wire_lcd.bmp.jpg

Import program1WireLcd

C coded library to use 1Wire LCD

Committer:
ahmetunal
Date:
Mon Aug 13 22:47:50 2012 +0000
Revision:
1:842f42dcf39a
Parent:
0:fcd5b3044e79
C code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ahmetunal 0:fcd5b3044e79 1 #include "1WireLcd.h"
ahmetunal 0:fcd5b3044e79 2 #include "mbed.h"
ahmetunal 0:fcd5b3044e79 3
ahmetunal 0:fcd5b3044e79 4 DigitalOut wire(p21);
ahmetunal 0:fcd5b3044e79 5
ahmetunal 0:fcd5b3044e79 6
ahmetunal 0:fcd5b3044e79 7
ahmetunal 0:fcd5b3044e79 8
ahmetunal 0:fcd5b3044e79 9 void lcd_putc(unsigned char c)
ahmetunal 0:fcd5b3044e79 10 {
ahmetunal 0:fcd5b3044e79 11 unsigned char data;
ahmetunal 0:fcd5b3044e79 12 data = 0x00;
ahmetunal 0:fcd5b3044e79 13 data |=0x50;
ahmetunal 0:fcd5b3044e79 14 one_wire(data);
ahmetunal 0:fcd5b3044e79 15 data |= ((c & 0xF0)>>4);
ahmetunal 0:fcd5b3044e79 16 one_wire(data);
ahmetunal 0:fcd5b3044e79 17 data &= 0x1F;
ahmetunal 0:fcd5b3044e79 18 one_wire(data);
ahmetunal 0:fcd5b3044e79 19 wait_us(100);
ahmetunal 0:fcd5b3044e79 20
ahmetunal 0:fcd5b3044e79 21 data = 0x00;
ahmetunal 0:fcd5b3044e79 22 data |= 0x50;
ahmetunal 0:fcd5b3044e79 23 one_wire(data);
ahmetunal 0:fcd5b3044e79 24 data |= (((c & 0x0F) << 4) >> 4);
ahmetunal 0:fcd5b3044e79 25 one_wire(data);
ahmetunal 0:fcd5b3044e79 26 data &= 0x1F;
ahmetunal 0:fcd5b3044e79 27 one_wire(data);
ahmetunal 0:fcd5b3044e79 28 wait_us(100);
ahmetunal 0:fcd5b3044e79 29
ahmetunal 0:fcd5b3044e79 30 }
ahmetunal 0:fcd5b3044e79 31
ahmetunal 0:fcd5b3044e79 32 void lcd_command(unsigned char c)
ahmetunal 0:fcd5b3044e79 33 {
ahmetunal 0:fcd5b3044e79 34 unsigned char data;
ahmetunal 0:fcd5b3044e79 35 data = 0x00;
ahmetunal 0:fcd5b3044e79 36 data |=0x40;
ahmetunal 0:fcd5b3044e79 37 one_wire(data);
ahmetunal 0:fcd5b3044e79 38 data |= ((c & 0xF0)>>4);
ahmetunal 0:fcd5b3044e79 39 one_wire(data);
ahmetunal 0:fcd5b3044e79 40 data &= 0x0F;
ahmetunal 0:fcd5b3044e79 41 one_wire(data);
ahmetunal 0:fcd5b3044e79 42 wait_us(100);
ahmetunal 0:fcd5b3044e79 43
ahmetunal 0:fcd5b3044e79 44 data = 0x00;
ahmetunal 0:fcd5b3044e79 45 data |= 0x40;
ahmetunal 0:fcd5b3044e79 46 one_wire(data);
ahmetunal 0:fcd5b3044e79 47 data |= (((c & 0x0F) << 4) >> 4);
ahmetunal 0:fcd5b3044e79 48 one_wire(data);
ahmetunal 0:fcd5b3044e79 49 data &= 0x0F;
ahmetunal 0:fcd5b3044e79 50 one_wire(data);
ahmetunal 0:fcd5b3044e79 51 wait_us(100);
ahmetunal 0:fcd5b3044e79 52
ahmetunal 0:fcd5b3044e79 53 }
ahmetunal 0:fcd5b3044e79 54
ahmetunal 0:fcd5b3044e79 55
ahmetunal 0:fcd5b3044e79 56 void lcd_init()
ahmetunal 0:fcd5b3044e79 57 {
ahmetunal 0:fcd5b3044e79 58 one_wire(0);
ahmetunal 0:fcd5b3044e79 59 wait_ms(15);
ahmetunal 0:fcd5b3044e79 60 lcd_command(GoToFirst);
ahmetunal 0:fcd5b3044e79 61 wait_ms(2);
ahmetunal 0:fcd5b3044e79 62 lcd_command(TwoLine4Bit);
ahmetunal 0:fcd5b3044e79 63 lcd_command(WriteRight);
ahmetunal 0:fcd5b3044e79 64 lcd_command(HidePointer);
ahmetunal 0:fcd5b3044e79 65 lcd_clear();
ahmetunal 0:fcd5b3044e79 66
ahmetunal 0:fcd5b3044e79 67
ahmetunal 0:fcd5b3044e79 68 lcd_command(FirstLine);
ahmetunal 0:fcd5b3044e79 69 }
ahmetunal 0:fcd5b3044e79 70
ahmetunal 0:fcd5b3044e79 71
ahmetunal 0:fcd5b3044e79 72 void lcd_clear(void)
ahmetunal 0:fcd5b3044e79 73 {
ahmetunal 0:fcd5b3044e79 74 lcd_command(0x1);
ahmetunal 0:fcd5b3044e79 75 wait_ms(2);
ahmetunal 0:fcd5b3044e79 76 }
ahmetunal 0:fcd5b3044e79 77
ahmetunal 0:fcd5b3044e79 78 void lcd_position(unsigned char x,unsigned char y)
ahmetunal 0:fcd5b3044e79 79 {
ahmetunal 0:fcd5b3044e79 80 if(x==1)
ahmetunal 0:fcd5b3044e79 81 lcd_command(0x80+((y-1)%20));
ahmetunal 0:fcd5b3044e79 82 else
ahmetunal 0:fcd5b3044e79 83 lcd_command(0xC0+((y-1)%20));
ahmetunal 0:fcd5b3044e79 84 }
ahmetunal 0:fcd5b3044e79 85
ahmetunal 0:fcd5b3044e79 86 void lcd_printf(const char * a)
ahmetunal 0:fcd5b3044e79 87 {
ahmetunal 0:fcd5b3044e79 88 wait_us(100);
ahmetunal 0:fcd5b3044e79 89 while(*a)
ahmetunal 0:fcd5b3044e79 90 lcd_putc(*a++);
ahmetunal 0:fcd5b3044e79 91 }
ahmetunal 0:fcd5b3044e79 92
ahmetunal 0:fcd5b3044e79 93 void one_wire(unsigned char data)
ahmetunal 0:fcd5b3044e79 94 {
ahmetunal 0:fcd5b3044e79 95 char i;
ahmetunal 0:fcd5b3044e79 96 wire=1;
ahmetunal 0:fcd5b3044e79 97 for(i=0;i < 8;i++)
ahmetunal 0:fcd5b3044e79 98 {
ahmetunal 0:fcd5b3044e79 99 if((data<<(i))&0x80)
ahmetunal 0:fcd5b3044e79 100 {
ahmetunal 0:fcd5b3044e79 101 wire=0;
ahmetunal 0:fcd5b3044e79 102 wait_us(1);
ahmetunal 0:fcd5b3044e79 103 wire=1;
ahmetunal 0:fcd5b3044e79 104 }
ahmetunal 0:fcd5b3044e79 105 else
ahmetunal 0:fcd5b3044e79 106 {
ahmetunal 0:fcd5b3044e79 107 wire=0;
ahmetunal 0:fcd5b3044e79 108 wait_us(15);
ahmetunal 0:fcd5b3044e79 109 wire=1;
ahmetunal 0:fcd5b3044e79 110 wait_us(30);
ahmetunal 0:fcd5b3044e79 111 }
ahmetunal 0:fcd5b3044e79 112 }
ahmetunal 0:fcd5b3044e79 113 wire=0;
ahmetunal 0:fcd5b3044e79 114 wait_us(210);
ahmetunal 0:fcd5b3044e79 115 wire=1;
ahmetunal 0:fcd5b3044e79 116 wait_us(300);
ahmetunal 0:fcd5b3044e79 117 }
ahmetunal 0:fcd5b3044e79 118