C coded library to use 1Wire LCD
This method allows you to control an lcd with a 74x595 shift register.
Quote:
Import program1WireLcd
C coded library to use 1Wire LCD
1WireLcd/1WireLcd.cpp@1:842f42dcf39a, 2012-08-13 (annotated)
- 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?
User | Revision | Line number | New 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 |