With a 595 shift register shifting one wire lcd.
1wire_lcd.cpp@0:9245c05647c9, 2011-02-22 (annotated)
- Committer:
- ahmetunal
- Date:
- Tue Feb 22 10:41:38 2011 +0000
- Revision:
- 0:9245c05647c9
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ahmetunal | 0:9245c05647c9 | 1 | #include "1wire_lcd.h" |
ahmetunal | 0:9245c05647c9 | 2 | #include "mbed.h" |
ahmetunal | 0:9245c05647c9 | 3 | |
ahmetunal | 0:9245c05647c9 | 4 | DigitalOut wire(p21); |
ahmetunal | 0:9245c05647c9 | 5 | |
ahmetunal | 0:9245c05647c9 | 6 | |
ahmetunal | 0:9245c05647c9 | 7 | void one_wire(unsigned char data) |
ahmetunal | 0:9245c05647c9 | 8 | { |
ahmetunal | 0:9245c05647c9 | 9 | char i; |
ahmetunal | 0:9245c05647c9 | 10 | wire=1; |
ahmetunal | 0:9245c05647c9 | 11 | for(i=0;i < 8;i++) |
ahmetunal | 0:9245c05647c9 | 12 | { |
ahmetunal | 0:9245c05647c9 | 13 | if((data<<(i))&0x80) |
ahmetunal | 0:9245c05647c9 | 14 | { |
ahmetunal | 0:9245c05647c9 | 15 | wire=0; |
ahmetunal | 0:9245c05647c9 | 16 | wire=1; |
ahmetunal | 0:9245c05647c9 | 17 | } |
ahmetunal | 0:9245c05647c9 | 18 | else |
ahmetunal | 0:9245c05647c9 | 19 | { |
ahmetunal | 0:9245c05647c9 | 20 | wire=0; |
ahmetunal | 0:9245c05647c9 | 21 | wait_us(15); |
ahmetunal | 0:9245c05647c9 | 22 | wire=1; |
ahmetunal | 0:9245c05647c9 | 23 | wait_us(30); |
ahmetunal | 0:9245c05647c9 | 24 | } |
ahmetunal | 0:9245c05647c9 | 25 | } |
ahmetunal | 0:9245c05647c9 | 26 | wire=0; |
ahmetunal | 0:9245c05647c9 | 27 | wait_us(210); |
ahmetunal | 0:9245c05647c9 | 28 | wire=1; |
ahmetunal | 0:9245c05647c9 | 29 | wait_us(300); |
ahmetunal | 0:9245c05647c9 | 30 | } |
ahmetunal | 0:9245c05647c9 | 31 | |
ahmetunal | 0:9245c05647c9 | 32 | |
ahmetunal | 0:9245c05647c9 | 33 | void lcd_putc(unsigned char c) |
ahmetunal | 0:9245c05647c9 | 34 | { |
ahmetunal | 0:9245c05647c9 | 35 | unsigned char data; |
ahmetunal | 0:9245c05647c9 | 36 | data = 0x00; |
ahmetunal | 0:9245c05647c9 | 37 | data |=0x50; |
ahmetunal | 0:9245c05647c9 | 38 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 39 | data |= ((c & 0xF0)>>4); |
ahmetunal | 0:9245c05647c9 | 40 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 41 | data &= 0x1F; |
ahmetunal | 0:9245c05647c9 | 42 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 43 | wait_us(100); |
ahmetunal | 0:9245c05647c9 | 44 | |
ahmetunal | 0:9245c05647c9 | 45 | data = 0x00; |
ahmetunal | 0:9245c05647c9 | 46 | data |= 0x50; |
ahmetunal | 0:9245c05647c9 | 47 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 48 | data |= (((c & 0x0F) << 4) >> 4); |
ahmetunal | 0:9245c05647c9 | 49 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 50 | data &= 0x1F; |
ahmetunal | 0:9245c05647c9 | 51 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 52 | wait_us(100); |
ahmetunal | 0:9245c05647c9 | 53 | |
ahmetunal | 0:9245c05647c9 | 54 | } |
ahmetunal | 0:9245c05647c9 | 55 | |
ahmetunal | 0:9245c05647c9 | 56 | void lcd_command(unsigned char c) |
ahmetunal | 0:9245c05647c9 | 57 | { |
ahmetunal | 0:9245c05647c9 | 58 | unsigned char data; |
ahmetunal | 0:9245c05647c9 | 59 | data = 0x00; |
ahmetunal | 0:9245c05647c9 | 60 | data |=0x40; |
ahmetunal | 0:9245c05647c9 | 61 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 62 | data |= ((c & 0xF0)>>4); |
ahmetunal | 0:9245c05647c9 | 63 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 64 | data &= 0x0F; |
ahmetunal | 0:9245c05647c9 | 65 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 66 | wait_us(100); |
ahmetunal | 0:9245c05647c9 | 67 | |
ahmetunal | 0:9245c05647c9 | 68 | data = 0x00; |
ahmetunal | 0:9245c05647c9 | 69 | data |= 0x40; |
ahmetunal | 0:9245c05647c9 | 70 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 71 | data |= (((c & 0x0F) << 4) >> 4); |
ahmetunal | 0:9245c05647c9 | 72 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 73 | data &= 0x0F; |
ahmetunal | 0:9245c05647c9 | 74 | one_wire(data); |
ahmetunal | 0:9245c05647c9 | 75 | wait_us(100); |
ahmetunal | 0:9245c05647c9 | 76 | |
ahmetunal | 0:9245c05647c9 | 77 | } |
ahmetunal | 0:9245c05647c9 | 78 | |
ahmetunal | 0:9245c05647c9 | 79 | void lcd_clear(void) |
ahmetunal | 0:9245c05647c9 | 80 | { |
ahmetunal | 0:9245c05647c9 | 81 | lcd_command(0x1); |
ahmetunal | 0:9245c05647c9 | 82 | wait_ms(2); |
ahmetunal | 0:9245c05647c9 | 83 | } |
ahmetunal | 0:9245c05647c9 | 84 | |
ahmetunal | 0:9245c05647c9 | 85 | void lcd_position(unsigned char x,unsigned char y) |
ahmetunal | 0:9245c05647c9 | 86 | { |
ahmetunal | 0:9245c05647c9 | 87 | if(x==1) |
ahmetunal | 0:9245c05647c9 | 88 | lcd_command(0x80+((y-1)%20)); |
ahmetunal | 0:9245c05647c9 | 89 | else |
ahmetunal | 0:9245c05647c9 | 90 | lcd_command(0xC0+((y-1)%20)); |
ahmetunal | 0:9245c05647c9 | 91 | } |
ahmetunal | 0:9245c05647c9 | 92 | |
ahmetunal | 0:9245c05647c9 | 93 | void lcd_printf(const char * a) |
ahmetunal | 0:9245c05647c9 | 94 | { |
ahmetunal | 0:9245c05647c9 | 95 | wait_us(100); |
ahmetunal | 0:9245c05647c9 | 96 | while(*a) |
ahmetunal | 0:9245c05647c9 | 97 | lcd_putc(*a++); |
ahmetunal | 0:9245c05647c9 | 98 | } |
ahmetunal | 0:9245c05647c9 | 99 | |
ahmetunal | 0:9245c05647c9 | 100 | void lcd_init() |
ahmetunal | 0:9245c05647c9 | 101 | { |
ahmetunal | 0:9245c05647c9 | 102 | one_wire(0); |
ahmetunal | 0:9245c05647c9 | 103 | wait_ms(15); |
ahmetunal | 0:9245c05647c9 | 104 | lcd_command(0x02); |
ahmetunal | 0:9245c05647c9 | 105 | wait_ms(2); |
ahmetunal | 0:9245c05647c9 | 106 | lcd_command(40); //2line 4bit |
ahmetunal | 0:9245c05647c9 | 107 | lcd_command(6); //write right |
ahmetunal | 0:9245c05647c9 | 108 | lcd_command(12); //pointer hidden |
ahmetunal | 0:9245c05647c9 | 109 | lcd_clear(); |
ahmetunal | 0:9245c05647c9 | 110 | |
ahmetunal | 0:9245c05647c9 | 111 | |
ahmetunal | 0:9245c05647c9 | 112 | lcd_command(128); //first line |
ahmetunal | 0:9245c05647c9 | 113 | |
ahmetunal | 0:9245c05647c9 | 114 | } |
ahmetunal | 0:9245c05647c9 | 115 | |
ahmetunal | 0:9245c05647c9 | 116 |