Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <8051.h>
- #include <stdbool.h>
- #include <serial_port.h>
- #include <i2c.h>
- //-----------------------------------------------------------------------------
- //--Display "Treiber"----------------------------------------------------------
- //-----------------------------------------------------------------------------
- #define I2C_DISPLAY_ADDR 0x70
- const unsigned char segment_table[16] = { 0xFC, // 0
- 0x60, // 1
- 0xDA, // 2
- 0xF2, // 3
- 0x66, // 4
- 0xB6, // 5
- 0xBE, // 6
- 0xE0, // 7
- 0xFE, // 8
- 0xF6, // 9
- 0xEE, // A
- 0x3E, // B
- 0x9C, // C
- 0x7A, // D
- 0x9E, // E
- 0x8E, // F
- };
- void lcd_print_number_hex(unsigned short number)
- {
- unsigned char i;
- i2c_adrwr(I2C_DISPLAY_ADDR);
- i2c_datwrf(0x80);
- i2c_datwrf(0x60);
- i = number & 0x000F;
- i2c_datwrf(segment_table[i]);
- i = (number >> 4) & 0x000F;
- i2c_datwrf(segment_table[i]);
- i = (number >> 8) & 0x000F;
- i2c_datwrf(segment_table[i]);
- i = (number >> 12) & 0x000F;
- i2c_datwrl(segment_table[i]);
- }
- void lcd_print_number_dec(short number)
- {
- unsigned char decimal[4];
- bool sign = false;
- i2c_adrwr(I2C_DISPLAY_ADDR);
- i2c_datwrf(0x80);
- i2c_datwrf(0x60);
- if(number > 9999 || number < -999)
- {
- i2c_datwrf(0x00);
- i2c_datwrf(0x0A | 1); // r.
- i2c_datwrf(0x0A); // r
- i2c_datwrl(0x9E); // E
- return;
- }
- sign = (number >> 15) & 1;
- if(sign)
- number = -number;
- for(decimal[3] = 0; number >= 1000; number -= 1000)
- decimal[3]++;
- for(decimal[2] = 0; number >= 100; number -= 100)
- decimal[2]++;
- for(decimal[1] = 0; number >= 10; number -= 10)
- decimal[1]++;
- decimal[0] = number;
- i2c_datwrf(segment_table[decimal[0]]);
- i2c_datwrf(segment_table[decimal[1]]);
- i2c_datwrf(segment_table[decimal[2]]);
- if(sign)
- i2c_datwrl(0x02); // -
- else
- i2c_datwrl(segment_table[decimal[3]]);
- }
- void lcd_init()
- {
- i2c_adrwr(I2C_DISPLAY_ADDR);
- i2c_datwrf(0xCD); // MODE SET: 11001101
- i2c_datwrf(0x80); // LOAD DATA POINTER: 10000000
- i2c_datwrf(0xE0); // DEVICE SELECT: 11100000
- i2c_datwrf(0xF8); // BANK SELECT: 11111000
- i2c_datwrf(0x70); // BLINK: 01110000
- i2c_datwrf(0x00);
- i2c_datwrf(0x00);
- i2c_datwrf(0x00);
- i2c_datwrf(0x00);
- i2c_datwrl(0x00);
- }
- void lcd_deinit()
- {
- i2c_adrwr(I2C_DISPLAY_ADDR);
- i2c_datwrf(0xC5); // MODE SET: 11000101
- }
- //-----------------------------------------------------------------------------
- void main()
- {
- short counter = 0;
- char ch = 0;
- lcd_init();
- while(1 > 0)
- {
- ch = sp_read_char();
- if(ch == '+')
- counter++;
- else if(ch == '-')
- counter--;
- lcd_print_number_dec(counter);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement