![]() | ![]() | ![]() |
| | #76 |
|
Clock in progress:
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #77 |
|
Do you have a non-flash video like a .AVI or .WMV? My PC is flash disabled.
| |
| |
| | #78 |
|
Right click and save as: http://atomsofttech.no-ip.info/tempdl/GEDC0020.AVI EDIT: Just fixed file should work well!
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 17th June 2009 at 01:54 PM. | |
| |
| | #79 |
|
New Video Coming in about 3-4 minutes. Shows how i set the time ![]() http://atomsofttech.no-ip.info/tempdl/GEDC0021.avi
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 17th June 2009 at 03:36 PM. | |
| |
| | #80 |
|
hi, everyone. I got to this thread through google. I have been working on the same display over the last couple days and would love to share it with folks here and get some help as well. My code came from a CCS package I got on the web. I then adapted it for PICC (12f675) and then I decided that for what I wanted to do (as a prototype of a little portable scope), I needed something faster. so I went to ARM7. the code is compiled under Keil uvision3, mdk3.70. I haven't figured out a way to post code so I will just put up a picture of the program running on proteus. it works fine but has trouble displaying lower case letters some of the times so I am working through that right now. the display allows attributes (normal, overline, underline, strike, and reverse) to be attached to each string to be displayed. two issues with the program now: 1) it doesn't display some of the lower case letters some of the times. see the red arrow. it should have displayed "hello, world", all in lower case but it is been shifted by 1 letter. 2) it has some remaining lines on the last line (page 8, d0, per the datasheet). now sure how data go there. i will post the code once I figure out how to do so. | |
| |
| | #81 |
|
as for the arrow you: You either have a extra character in the beginning of your font table or you are minus-ing the wrong amount from it. To place code here just put the code in these brackets [ code] CODE here [ /code] remove the spaces within the brackets. You will then see it like: Code: Code Here To upload you have to be in Advanced Mode [Go Advanced] button on the bottom right of quick reply
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 17th June 2009 at 04:48 PM. | |
| |
| | #82 |
|
thanks, atomsofttech. here goes the code Code: //#include <htc.h>
//#include "delay.h"
#include <LPC210x.h>
//#include "always.h"
#define GETBIT(var,bit) (((var)>>(bit))&1) /* read bit from var */
#define SETBIT(var,bit) ((var)|=(1L<<(bit))) /* set bit from var to 1 */
#define CLRBIT(var,bit) ((var)&=(~(1L<<(bit)))) /* clear bit from var (set it to 0) */
#define uint unsigned int
#define byte unsigned char
//#define delay_ms() DelayMs()
/////////////////////////////////////////////////////////////////////////////////
// Description : This firmware for Nokia 7110 (SED1565 controller) 96*65 TEST //
// Hardware : PIC16F875 , LCD NOKIA7110 //
// Firmware : Rev 0.1 //
// Date : 6/14/2009 //
// by : Hello world //
// Compiler : PICC-Lite 9.6L1 / TIDE //
/////////////////////////////////////////////////////////////////////////////////
//#include <16F877.h>
//#fuses HS,NOPUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
//#use delay(clock=20000000,RESTART_WDT)
//#byte lcdport = 6 // (PORTB address value 6 for PIC16F628 device)
// hardware configuration
// PIC SIDE LCD SIDE
/*#bit nok_sda = lcdport.0 // RB0 pin-19 pin-13 Serial data
#bit nok_sclk = lcdport.1 // RB1 pin-20 pin-05 Serial clock
#bit nok_dc = lcdport.2 // RB2 pin-21 pin-04 Data or Command mode
#bit nok_cs = lcdport.3 // RB3 pin-22 pin-02 LCD Chip select
#bit nok_res = lcdport.4 // RB4 pin-23 pin-14 LCD Reset
#zero_ram
*/
// hardware configuration
// change this section if your pin connection is different
#define lcd_res 0 //lcd_res connected to p0.0, pin13
#define lcd_sda 1 //lcd_sda connected to p0.1, pin14
#define lcd_led 2 //led backlight connected to p0.2, pin18
#define lcd_sclk 3 //lcd_sclk connected to p0.3, pin21
#define lcd_dc 4 //lcd_dc connected to p0.4, pin22
#define lcd_cs 5 //lcd_cs connected to p0.5, pin23
// end hardware configuration
// display attributes
#define NORMAL 0x00 // normal black on green
#define UNDERLINE 0x80
#define STRIKE 0x10
#define OVERLINE 0x01
#define REVERSE 0xff //green on black
#define negative_lcd lcd_write_command(lcd_reverse)
#define normal_lcd lcd_write_command(lcd_normal)
/**********************************************************
LCD Commands
**********************************************************/
#define pow_ctrl 0x20 // (16) power control set value (contrast level --> 0x00 lightest to 0x3F darkest), from 0b00101000 to 0b00101111.
#define v5_ratio 0x22 //(17) V5 resistor ratio, from 0b00100000 to 0b00100111. need to add some ratio
#define start_line 0x40 // start line - set the display line start address.
#define elec_vol 0x81 // (18) electronic volume mode
#define adc_normal 0xA0 // (8) <ADC select> (0xA1/0b10100001 reverse lcd - 0xA0/0b10100000 select normal)
#define adc_reverse 0xA1
#define lcd_bias_1_over_9 0xA2 // (11) lcd bias (1/9 0xA2/0b10100010 - 1/7 0xA3/0b10100011)
#define lcd_bias_1_over_7 0xA3
#define lcd_all_off 0xA4 //turn all pixels off
#define lcd_all_on 0xA5 //lcd all points on - turn on all pixels. 0xA4: normal display.
#define lcd_normal 0xA6 // 0b10100110 = 0xA6, lcd in normal display mode (0xA7/0b10100111 negative mode)
#define lcd_reverse 0xA7
#define lcd_off 0xAE //
#define lcd_on 0xAF // lcd on - display on. 0xAE: display off.
#define comm_normal 0xC0 // (15) common output normal (0xC8 reverse)
#define comm_reverse 0xC8
#define lcd_nop 0xE3 // nop (command for no-operation, 0b11100011.
#define lcd_1st_col 0x12 //first displayable column. datasheet didn't mention this. WEIRD!
/**********************************************************
Global Variable
**********************************************************/
char page;
char x,y;
//char char_row;
//char charpos;
//char chardata;
/**********************************************************
Function Prototype
**********************************************************/
void lcd_write_dorc(char byteforlcd);
void lcd_write_command(char byteforlcd_command);
void lcd_write_data(char byteforlcd_data);
void lcd_gotoxy(char lcd_row, char lcd_col); //go to lcd_row / 0-8; and lcd_col / 0-95
//void lcd_pixel(char x, char y); // not used.
void lcd_chr(char charsel, char attribute);
void lcd_str(const char *str, char attribute);
void lcd_reset(void);
void lcd_cls(void);
void lcd_init(void);
void mcu_init(void);
void DelayUs(int);
void DelayMs(int);
/********************************************************
ASCII table for 5x7 dots font
********************************************************/
const char Char_Table [] = {
0x00,0x00,0x00,0x00,0x00, // 20 space
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e, // 4f O
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c \
0x00,0x41,0x41,0x7f,0x00, // 5d ]
0x04,0x02,0x01,0x02,0x04, // 5e ^
0x40,0x40,0x40,0x40,0x40, // 5f _
0x00,0x01,0x02,0x04,0x00, // 60 `
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b {
0x00,0x00,0x7f,0x00,0x00, // 7c |
0x00,0x41,0x36,0x08,0x00, // 7d }
0x10,0x08,0x08,0x10,0x08, // 7e ~
0x78,0x46,0x41,0x46,0x78}; // 7f ¦
//7e,43,40,43,7e //Ü
//7e,43,42,43,7e //Ö
//1e,21,21,71,21 //Ç
//3c,42,53,53,72 //Ð
/********************************************************
lcd clear LCD function
********************************************************/
void lcd_cls(void) {
for (page=0; page<9; page++) // 9 page, fill display RAM with 0s.
{
lcd_write_command(0xB0 | page); // page address ie:0xB0,0xB1,...,0xB7
lcd_write_command(0x11); // 0x11, most 4 bit column address command 0001 0011
lcd_write_command(0x01); // 0x02, least 4 bit column address command 0000 0011
for (x=96; x>0; x--) // 96 column
lcd_write_data(0x00);
}
}
/**********************************************************
Reset LCD Function
**********************************************************/
void lcd_reset(void) {
IOSET = 1<<lcd_cs; //select the lcd
DelayMs(10);
IOCLR = 1<<lcd_res; //lcd_res low to reset the display. the lcd going into default state.
DelayMs(10); //give the lcd time to reset.
IOSET = 1<<lcd_res; //pulling the lcd out of reset.
DelayMs(100);
}
/**********************************************************
Initial LCD Function
**********************************************************/
void lcd_init(void) {
lcd_reset();
// the following initialization sequence per datasheet. All needs to be done in 5ms. (X) where X is the command on pg 8-56 of datasheet
lcd_write_command(lcd_normal); // 0b10100110 = 0xA6, lcd in normal display mode (0xA7/0b10100111 negative mode)
lcd_write_command(lcd_bias_1_over_7); // (11) lcd bias (1/9 0xA2/0b10100010 - 1/7 0xA3/0b10100011)
lcd_write_command(adc_reverse); // (8) <ADC select> (0xA1/0b10100001 reverse lcd - 0xA0/0b10100000 select normal)
lcd_write_command(comm_normal); // (15) common output normal (0xC8 reverse)
lcd_write_command(v5_ratio+2); // (17) V5 resistor ratio, from 0b00100000 to 0b00100111
lcd_write_command(elec_vol); // (18) electronic volume mode
lcd_write_command(pow_ctrl+0x0E); // (16) power control set value (contrast level --> 0x00 lightest to 0x3F darkest), from 0b00101000 to 0b00101111.
//this concludes the mandatory initialization, as specified on pg 8-56 of the datasheet
lcd_write_command(0x2F); // power control set value, from 0b00101000 to 0b00101111. see pg 8-52 of datasheet.
lcd_write_command(lcd_nop); // nop (command for no-operation, 0b11100011.
// lcd_write_command(0x2f); // start line - set the display line start address.
lcd_write_command(lcd_on); // lcd on - display on. 0xAE: display off.
lcd_write_command(lcd_all_on); // lcd all points on - turn on all pixels. 0xA4: normal display.
DelayMs(50);
lcd_write_command(lcd_off); // lcd off - turn display off.
lcd_cls();
lcd_write_command(lcd_on); // lcd on
lcd_write_command(lcd_all_off); // lcd normal display mode
}
/**********************************************************
sent 8 bit data to LCD by series
**********************************************************/
void lcd_write_dorc(char byteforlcd) { // same lcdai 3310
char caa;
for (caa=8;caa>0;caa--)
{
IOCLR=1<<lcd_sclk; //data sent on the rising edge of sclk line
DelayUs(2);
if ((byteforlcd&0x80)==0) // tramission starts from D7, D6, .., D1, D0. if D7 is 0, send 0.
{IOCLR=1<<lcd_sda;}
else
{IOSET=1<<lcd_sda;}
IOSET=1<<lcd_sclk; //clock out the data
byteforlcd=byteforlcd<<1; //shift left the next bit.
}
}
/**********************************************************
Sent Command to LCD Function
**********************************************************/
void lcd_write_command(char byteforlcd_command) {
IOCLR=1<<lcd_dc; // dc=0 signals lcd command mode. A0 in the datasheet. dc=data or command.
IOCLR=1<<lcd_cs; // chip enabled, negative logic. _cs
lcd_write_dorc(byteforlcd_command); //send the command.
IOSET=1<<lcd_cs; // chip disabled
}
/**********************************************************
Sent Data to LCD Function
**********************************************************/
void lcd_write_data(char byteforlcd_data) {
IOSET=1<<lcd_dc; // display data mode. A0 in the datasheet. dorc=data or command.
IOCLR=1<<lcd_cs; // chip enabled, negative logic. _cs
lcd_write_dorc(byteforlcd_data); //send the data.
IOSET=1<<lcd_cs; // chip disabled
}
/**********************************************************
goto xy position on LCD Function
**********************************************************/
void lcd_gotoxy(char lcd_row, char lcd_col) { //lcy_row: 0 - 8 (8th column has only 1 line / D0, lcd_col: 0 - 15.
char col_addr;
lcd_write_command(0xB0 + lcd_row); // page address set. pg 8-48 in the datasheet.
col_addr = lcd_1st_col+(lcd_col*6); // each font has five columns + 1 blank column. xaddr: 0 - 95 on nokia 7110. no offset.
//lcd_1st_col=0x12: the first column of display starts here. Weird! the datasheet didn't mention it.
lcd_write_command(0x10 | (col_addr>>4)); // column address 4 most bit set
lcd_write_command(0x0f & col_addr); // column address 4 least bit set
}
/**********************************************************
Convert bitmap to charractor Function
**********************************************************/
void lcd_chr(char charsel, char attribute) {
char char_row, char_data;
int char_pos;
if (charsel < 0x20) return;
if (charsel > 0x7f) return; //check for illegal characters
for (char_row = 0; char_row < 5; char_row++) // 5 bytes
{
char_pos=charsel-0x20;
char_data=Char_Table[char_pos*5+char_row];
// lcd_write_data(~char_data); // send font data to lcd, white char on black background
if(attribute == REVERSE)
lcd_write_data(~char_data); // send font data to lcd
else
lcd_write_data(char_data | attribute);
}
// lcd_write_data(~0x00); // blank side pixels for each font, white char on black background
if (attribute == REVERSE)
lcd_write_data(~0x00);
else
lcd_write_data(0x00 | attribute); // blank side pixels for each font
}
/**********************************************************
Write a string at current screen position
**********************************************************/
void lcd_str(const char *str, char attribute) {
while (*str)
lcd_chr(*str++, attribute);
}
/**********************************************************
delay routines
***********************************************************/
void DelayUs(int us) {
for (; us>0; us--);
}
void DelayMs(int ms) {
for (; ms>0; ms--)
DelayUs(1000);
}
void mcu_init(void) {
// need to initialize the mcu here.
PINSEL0=0x00;
IODIR=0xff; //pin p0.0..p0.7 used for gpio.
}
/*****************************************************************
Main Progarm
*****************************************************************/
int main(void)
{
mcu_init();
lcd_init();
while (1) {
lcd_gotoxy(0,0);
// lcd_chr('c');
// lcd_chr('b');
lcd_str("0-HELLO, WORLD!", NORMAL);
lcd_gotoxy(1,0);
lcd_str("1-01234567890012", NORMAL);
lcd_gotoxy(2,0);
lcd_str("2-hello, world!", OVERLINE);
lcd_gotoxy(3,0);
lcd_str("3-ABCDEFGHIJKLMN", UNDERLINE);
lcd_gotoxy(4,0);
lcd_str("4-abcdefghijklmn", STRIKE);
lcd_gotoxy(5,0);
lcd_str("5-OPQRSTUVWXYZ", OVERLINE | STRIKE);
lcd_gotoxy(6,0);
lcd_str("6-opqrstuvwxyz", UNDERLINE | STRIKE);
lcd_gotoxy(7,0);
lcd_str("7- BYE BYE", STRIKE | OVERLINE | UNDERLINE | REVERSE);
// lcd_cls();
}
}
/*void main(void) {
while (1){
//TODO Auto-generated main function
}
}
*/
| |
| |
| | #83 |
|
do me 1 favor try printing this to the LCD: Code: lcd_gotoxy(1,0);
lcd_str("XYZ[\]^_`abc", NORMAL);
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics | |
| |
| | #84 |
|
oh and for the extra bits that appear in bottom left try clearing the screen before first write. Try this as your main: Code: /*****************************************************************
Main Progarm
*****************************************************************/
int main(void)
{
mcu_init();
lcd_init();
while (1) {
// lcd_chr('c');
// lcd_chr('b');
lcd_cls();
lcd_gotoxy(0,0);
lcd_str("0- XYZ[\]^_`abc", NORMAL)
// lcd_str("0-HELLO, WORLD!", NORMAL);
lcd_gotoxy(1,0);
lcd_str("1-01234567890012", NORMAL);
lcd_gotoxy(2,0);
lcd_str("2-hello, world!", OVERLINE);
lcd_gotoxy(3,0);
lcd_str("3-ABCDEFGHIJKLMN", UNDERLINE);
lcd_gotoxy(4,0);
lcd_str("4-abcdefghijklmn", STRIKE);
lcd_gotoxy(5,0);
lcd_str("5-OPQRSTUVWXYZ", OVERLINE | STRIKE);
lcd_gotoxy(6,0);
lcd_str("6-opqrstuvwxyz", UNDERLINE | STRIKE);
lcd_gotoxy(7,0);
lcd_str("7- BYE BYE", STRIKE | OVERLINE | UNDERLINE | REVERSE);
// lcd_cls();
}
}
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 18th June 2009 at 12:16 AM. | |
| |
| | #85 | |
| Quote:
Code: lcd_str("XYZ[\\]^_`abc", NORMAL);
the output is perfectly normal. | ||
| |
| | #86 | |
| Quote:
the dots at the bottom of the screen has something to do with the 7110 model in proteus, I suspect. If I turn comm to normal, in lcd_init(): Code: lcd_write_command(comm_reverse); // (15) common output normal (0xC8 reverse) | ||
| |
| | #87 | |
| Quote:
.Code: lcd_gotoxy(0,0);
lcd_str("0-XYZ[\\]^_`abc", NORMAL);
lcd_gotoxy(1,0);
lcd_str("1-XYZ[\\]^_abc", NORMAL);
| ||
| |
| | #88 |
|
try removing some of the comments from the font Code: 0x00,0x41,0x41,0x7f,0x00, // 5d ]
0x04,0x02,0x01,0x02,0x04,
0x40,0x40,0x40,0x40,0x40,
0x00,0x01,0x02,0x04,0x00,
0x20,0x54,0x54,0x54,0x78, // 61 a
__________________ AtomSofts eBay Store AtomSoftTech: C18 TIPS & TRICKS v9 PDF My Name: Jason Lopez http://atomsofttech.info/ | My YouTube Videos! My Favorite Store: dipmicro Electronics Last edited by AtomSoft; 18th June 2009 at 01:42 AM. | |
| |
| | #89 | |
| Quote:
eliminating the comments made no difference. also, have you noticed that the char ']' was not displaced at all? | ||
| |
| | #90 | |
| Quote:
Code: 0x02,0x04,0x08,0x10,0x20, // 5c \ Code: 0x02,0x04,0x08,0x10,0x20, // 5c 55 thank you so much for your help. here is a copy of the complete code. Code: //#include <htc.h>
//#include "delay.h"
#include <LPC210x.h>
//#include "always.h"
#define GETBIT(var,bit) (((var)>>(bit))&1) /* read bit from var */
#define SETBIT(var,bit) ((var)|=(1L<<(bit))) /* set bit from var to 1 */
#define CLRBIT(var,bit) ((var)&=(~(1L<<(bit)))) /* clear bit from var (set it to 0) */
#define uint unsigned int
#define byte unsigned char
//#define delay_ms() DelayMs()
/////////////////////////////////////////////////////////////////////////////////
// Description : This firmware for Nokia 7110 (SED1565 controller) 96*65 TEST //
// Hardware : PIC16F875 , LCD NOKIA7110 //
// Firmware : Rev 0.1 //
// Date : 6/14/2009 //
// by : Hello world //
// Compiler : PICC-Lite 9.6L1 / TIDE //
/////////////////////////////////////////////////////////////////////////////////
//#include <16F877.h>
//#fuses HS,NOPUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
//#use delay(clock=20000000,RESTART_WDT)
//#byte lcdport = 6 // (PORTB address value 6 for PIC16F628 device)
// hardware configuration
// PIC SIDE LCD SIDE
/*#bit nok_sda = lcdport.0 // RB0 pin-19 pin-13 Serial data
#bit nok_sclk = lcdport.1 // RB1 pin-20 pin-05 Serial clock
#bit nok_dc = lcdport.2 // RB2 pin-21 pin-04 Data or Command mode
#bit nok_cs = lcdport.3 // RB3 pin-22 pin-02 LCD Chip select
#bit nok_res = lcdport.4 // RB4 pin-23 pin-14 LCD Reset
#zero_ram
*/
// hardware configuration
// change this section if your pin connection is different
#define lcd_res 0 //lcd_res connected to p0.0, pin13
#define lcd_sda 1 //lcd_sda connected to p0.1, pin14
#define lcd_led 2 //led backlight connected to p0.2, pin18
#define lcd_sclk 3 //lcd_sclk connected to p0.3, pin21
#define lcd_dc 4 //lcd_dc connected to p0.4, pin22
#define lcd_cs 5 //lcd_cs connected to p0.5, pin23
// end hardware configuration
// display attributes
#define NORMAL 0x00 // normal black on green
#define UNDERLINE 0x80
#define STRIKE 0x10
#define OVERLINE 0x01
#define REVERSE 0xff //green on black
#define negative_lcd lcd_write_command(lcd_reverse)
#define normal_lcd lcd_write_command(lcd_normal)
/**********************************************************
LCD Commands
**********************************************************/
#define pow_ctrl 0x20 // (16) power control set value (contrast level --> 0x00 lightest to 0x3F darkest), from 0b00101000 to 0b00101111.
#define v5_ratio 0x22 //(17) V5 resistor ratio, from 0b00100000 to 0b00100111. need to add some ratio
#define start_line 0x40 // start line - set the display line start address.
#define elec_vol 0x81 // (18) electronic volume mode
#define adc_normal 0xA0 // (8) <ADC select> (0xA1/0b10100001 reverse lcd - 0xA0/0b10100000 select normal)
#define adc_reverse 0xA1
#define lcd_bias_1_over_9 0xA2 // (11) lcd bias (1/9 0xA2/0b10100010 - 1/7 0xA3/0b10100011)
#define lcd_bias_1_over_7 0xA3
#define lcd_all_off 0xA4 //turn all pixels off
#define lcd_all_on 0xA5 //lcd all points on - turn on all pixels. 0xA4: normal display.
#define lcd_normal 0xA6 // 0b10100110 = 0xA6, lcd in normal display mode (0xA7/0b10100111 negative mode)
#define lcd_reverse 0xA7
#define lcd_off 0xAE //
#define lcd_on 0xAF // lcd on - display on. 0xAE: display off.
#define comm_normal 0xC0 // (15) common output normal (0xC8 reverse)
#define comm_reverse 0xC8
#define lcd_nop 0xE3 // nop (command for no-operation, 0b11100011.
#define lcd_1st_col 0x12 //first displayable column. datasheet didn't mention this. WEIRD!
/**********************************************************
Global Variable
**********************************************************/
char page;
char x,y;
//char char_row;
//char charpos;
//char chardata;
/**********************************************************
Function Prototype
**********************************************************/
void lcd_write_dorc(char byteforlcd);
void lcd_write_command(char byteforlcd_command);
void lcd_write_data(char byteforlcd_data);
void lcd_gotoxy(char lcd_row, char lcd_col); //go to lcd_row / 0-8; and lcd_col / 0-95
//void lcd_pixel(char x, char y); // not used.
void lcd_chr(char charsel, char attribute);
void lcd_str(const char *str, char attribute);
void lcd_reset(void);
void lcd_cls(void);
void lcd_init(void);
void mcu_init(void);
void DelayUs(int);
void DelayMs(int);
/********************************************************
ASCII table for 5x7 dots font
********************************************************/
const char Char_Table [] = {
0x00,0x00,0x00,0x00,0x00, // 20 space
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e, // 4f O
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c 55
0x00,0x41,0x41,0x7f,0x00, // 5d ]
0x04,0x02,0x01,0x02,0x04, // 5e ^
0x40,0x40,0x40,0x40,0x40, // 5f _
0x00,0x01,0x02,0x04,0x00, // 60 `
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b {
0x00,0x00,0x7f,0x00,0x00, // 7c |
0x00,0x41,0x36,0x08,0x00, // 7d }
0x10,0x08,0x08,0x10,0x08, // 7e ~
0x78,0x46,0x41,0x46,0x78}; // 7f ¦
//7e,43,40,43,7e //Ü
//7e,43,42,43,7e //Ö
//1e,21,21,71,21 //Ç
//3c,42,53,53,72 //Ð
/********************************************************
lcd clear LCD function
********************************************************/
void lcd_cls(void) {
for (page=0; page<9; page++) // 9 page, fill display RAM with 0s.
{
lcd_write_command(0xB0 | page); // page address ie:0xB0,0xB1,...,0xB7
lcd_write_command(0x11); // 0x11, most 4 bit column address command 0001 0011
lcd_write_command(0x01); // 0x02, least 4 bit column address command 0000 0011
for (x=96; x>0; x--) // 96 column
lcd_write_data(0x00);
}
}
/**********************************************************
Reset LCD Function
**********************************************************/
void lcd_reset(void) {
IOSET = 1<<lcd_cs; //select the lcd
DelayMs(10);
IOCLR = 1<<lcd_res; //lcd_res low to reset the display. the lcd going into default state.
DelayMs(10); //give the lcd time to reset.
IOSET = 1<<lcd_res; //pulling the lcd out of reset.
DelayMs(100);
}
/**********************************************************
Initial LCD Function
**********************************************************/
void lcd_init(void) {
lcd_reset();
// the following initialization sequence per datasheet. All needs to be done in 5ms. (X) where X is the command on pg 8-56 of datasheet
lcd_write_command(lcd_normal); // 0b10100110 = 0xA6, lcd in normal display mode (0xA7/0b10100111 negative mode)
lcd_write_command(lcd_bias_1_over_7); // (11) lcd bias (1/9 0xA2/0b10100010 - 1/7 0xA3/0b10100011)
lcd_write_command(adc_reverse); // (8) <ADC select> (0xA1/0b10100001 reverse lcd - 0xA0/0b10100000 select normal)
lcd_write_command(comm_normal); // (15) common output normal (0xC8 reverse)
lcd_write_command(v5_ratio+2); // (17) V5 resistor ratio, from 0b00100000 to 0b00100111
lcd_write_command(elec_vol); // (18) electronic volume mode
lcd_write_command(pow_ctrl+0x0E); // (16) power control set value (contrast level --> 0x00 lightest to 0x3F darkest), from 0b00101000 to 0b00101111.
//this concludes the mandatory initialization, as specified on pg 8-56 of the datasheet
lcd_write_command(0x2F); // power control set value, from 0b00101000 to 0b00101111. see pg 8-52 of datasheet.
lcd_write_command(lcd_nop); // nop (command for no-operation, 0b11100011.
lcd_write_command(0x40); // start line - set the display line start address.
lcd_write_command(lcd_on); // lcd on - display on. 0xAE: display off.
// lcd_write_command(lcd_all_on); // lcd all points on - turn on all pixels. 0xA4: normal display.
DelayMs(50);
// lcd_write_command(lcd_off); // lcd off - turn display off.
// lcd_cls();
// lcd_write_command(lcd_on); // lcd on
// lcd_write_command(lcd_all_off); // lcd normal display mode
}
/**********************************************************
sent 8 bit data to LCD by series
**********************************************************/
void lcd_write_dorc(char byteforlcd) { // same lcdai 3310
char caa;
for (caa=8;caa>0;caa--)
{
IOCLR=1<<lcd_sclk; //data sent on the rising edge of sclk line
// DelayUs(2);
if ((byteforlcd&0x80)==0) // tramission starts from D7, D6, .., D1, D0. if D7 is 0, send 0.
{IOCLR=1<<lcd_sda;}
else
{IOSET=1<<lcd_sda;}
IOSET=1<<lcd_sclk; //clock out the data
byteforlcd=byteforlcd<<1; //shift left the next bit.
}
}
/**********************************************************
Sent Command to LCD Function
**********************************************************/
void lcd_write_command(char byteforlcd_command) {
IOCLR=1<<lcd_dc; // dc=0 signals lcd command mode. A0 in the datasheet. dc=data or command.
IOCLR=1<<lcd_cs; // chip enabled, negative logic. _cs
lcd_write_dorc(byteforlcd_command); //send the command.
IOSET=1<<lcd_cs; // chip disabled
}
/**********************************************************
Sent Data to LCD Function
**********************************************************/
void lcd_write_data(char byteforlcd_data) {
IOSET=1<<lcd_dc; // display data mode. A0 in the datasheet. dorc=data or command.
IOCLR=1<<lcd_cs; // chip enabled, negative logic. _cs
lcd_write_dorc(byteforlcd_data); //send the data.
IOSET=1<<lcd_cs; // chip disabled
}
/**********************************************************
goto xy position on LCD Function
**********************************************************/
void lcd_gotoxy(char lcd_row, char lcd_col) { //lcy_row: 0 - 8 (8th column has only 1 line / D0, lcd_col: 0 - 15.
char col_addr;
lcd_write_command(0xB0 + lcd_row); // page address set. pg 8-48 in the datasheet.
col_addr = lcd_1st_col+(lcd_col*6); // each font has five columns + 1 blank column. xaddr: 0 - 95 on nokia 7110. no offset.
//lcd_1st_col=0x12: the first column of display starts here. Weird! the datasheet didn't mention it.
lcd_write_command(0x10 | (col_addr>>4)); // column address 4 most bit set
lcd_write_command(0x0f & col_addr); // column address 4 least bit set
}
/**********************************************************
Convert bitmap to charractor Function
**********************************************************/
void lcd_chr(char charsel, char attribute) {
char char_row, char_data;
int char_pos;
if (charsel < 0x20) return;
if (charsel > 0x7f) return; //check for illegal characters
for (char_row = 0; char_row < 5; char_row++) // 5 bytes
{
char_pos=charsel-0x20;
char_data=Char_Table[char_pos*5+char_row];
// lcd_write_data(~char_data); // send font data to lcd, white char on black background
if(attribute == REVERSE)
lcd_write_data(~char_data); // send font data to lcd
else
lcd_write_data(char_data | attribute);
}
// lcd_write_data(~0x00); // blank side pixels for each font, white char on black background
if (attribute == REVERSE)
lcd_write_data(~0x00);
else
lcd_write_data(0x00 | attribute); // blank side pixels for each font
}
/**********************************************************
Write a string at current screen position
**********************************************************/
void lcd_str(const char *str, char attribute) {
while (*str)
lcd_chr(*str++, attribute);
}
/**********************************************************
delay routines
***********************************************************/
void DelayUs(int us) {
for (; us>0; us--);
}
void DelayMs(int ms) {
for (; ms>0; ms--)
DelayUs(1000);
}
void mcu_init(void) {
// need to initialize the mcu here.
PINSEL0=0x00;
IODIR=0xff; //pin p0.0..p0.7 used for gpio.
}
/*****************************************************************
Main Progarm
*****************************************************************/
int main(void)
{
mcu_init();
lcd_init();
while (1) {
// lcd_chr('c');
// lcd_chr('b');
lcd_gotoxy(0,0);
lcd_str("0-XYZ[]^_`abc", NORMAL);
lcd_gotoxy(1,0);
lcd_str("1-XYZ[]^_abc", NORMAL);
/* lcd_gotoxy(2,0);
lcd_str("2-hello, world!", OVERLINE);
lcd_gotoxy(3,0);
lcd_str("3-ABCDEFGHIJKLMN", UNDERLINE);
lcd_gotoxy(4,0);
lcd_str("4-abcdefghijklmn", STRIKE);
lcd_gotoxy(5,0);
lcd_str("5-OPQRSTUVWXYZ", OVERLINE | STRIKE);
lcd_gotoxy(6,0);
lcd_str("6-opqrstuvwxyz", UNDERLINE | STRIKE);
lcd_gotoxy(7,0);
lcd_str("7- BYE BYE", STRIKE | OVERLINE | UNDERLINE | REVERSE);
*/
// lcd_gotoxy(8,0);
// lcd_str("0-HELLO, WORLD!", NORMAL);
// lcd_cls();
}
}
/*void main(void) {
while (1){
//TODO Auto-generated main function
}
}
*/
| ||
| |
|
| Tags |
| 96x64, controller, graphic, lcd, nokia7110, sed1565, w or |
| Thread Tools | |
| Display Modes | |
| |
Similar | ||||
| Title | Starter | Forum | Replies | Latest |
| Graphic LCD | baberjaved | Micro Controllers | 2 | 13th November 2007 05:01 PM |
| Graphic LCD | flemmard | Micro Controllers | 1 | 13th September 2007 03:32 AM |
| interfacing of PIC16F877A with graphic LCD controller T6963c | rosamma | Micro Controllers | 1 | 24th March 2007 12:29 PM |
| graphic LCD PIC MCU | tom_electronic | Micro Controllers | 4 | 28th February 2006 12:29 PM |
| graphic lcd help | jijita | General Electronics Chat | 1 | 18th August 2004 07:32 AM |