Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/28/08 03:25
Modified:
  08/28/08 03:26

Read: times


 
#157801 - Solved first problem,now second one
Responding to: ???'s previous message
Now i am able to use printf only to this extend,for example printf("12345AB") and whatever thing you can key in,with segment displaying at differnet brigtness.Becasuse i havn't done the things that is needn't for refreshing in TImer0 ISR.

My problem now is displaying something like d in my main method.


#include <REG52.h>
#include <stdlib.h>
#include <stdio.h>
#include <absacc.h>

#define TIMER0_COUNT 0xDC11 /* 10000h - ((11,059,200 Hz / (12 * FREQ)) - 17) */

void address(unsigned char ad);
void write(unsigned char id);
char putchar(char charIN);
unsigned char a,b,c,d,e,f,g,o,i;
unsigned int seg_count=1;

void delay(unsigned int itime)
{
unsigned int i,j;
for(i=0;i<itime;i++)
for(j=0;j<1275;j++);
}

unsigned char bdata LCD_digits[8];

const unsigned char code translation_table[128]={	
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0 - 7;clear
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 - 15;clear
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 16 - 23;clear
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 24 - 31;clear
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32 - 39;clear
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, // 40 - 47;clear
0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, // 48 - 55;clear
0xFE, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 56 - 63;clear
0x00, 0xee, 0x3e, 0x9C, 0x7A, 0x9e, 0x8e, 0xf6, // 64 - 71;clear
0x6E, 0x60, 0x70, 0xae, 0x1C, 0x00, 0x2A, 0x3A, // 72 - 79;clear
0xce, 0xe6, 0x0A, 0xb6, 0xe0, 0x7c, 0x00, 0x00, // 80 - 87;clear
0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 88 - 95;clear
0x00, 0xee, 0x3e, 0x9C, 0x7A, 0x9e, 0x8e, 0xf6, // 96 - 103;clear
0x6E, 0x60, 0x70, 0xae, 0x1C, 0x00, 0x2A, 0x3A, // 104 - 111;clear
0xce, 0xe6, 0x0A, 0xb6, 0xe0, 0x7c, 0x00, 0x00, // 112 - 119;clear
0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 120 - 127;clear
};

static void timer0_isr (void) interrupt 1 using 1//highest priority
{
unsigned i;
TR0 = 0; 
i = TIMER0_COUNT + TL0 + (TH0<<8);
TL0 = i;
TH0 = i >> 8;
TR0 = 1;

address(1 <<seg_count);
write(LCD_digits[seg_count]);		 //address 1;LCD_digits 1;
seg_count = (seg_count+1) & 0x07;		  //limit at 8
}


void address(unsigned char ad)
{
   	unsigned char i;
	LCS=0;
	for(i=0;i<8;i++)  //data
	{
		DATA =ad&0x01;
		CLK = 0;
		CLK = 1;
		ad=ad>>1;
	}
}
void write(unsigned char id)
{
    unsigned char i;
	for(i=0;i<8;i++)  //data
	{
		DATA =id&0x01;
		CLK = 0;
		CLK = 1;
		id=id>>1;
	}
	LCS=1;
}
void main()
{
EA = 0; /* disable interrupts */
TR0 = 0; /* stop timer 0 */
TMOD &= ~0x0F; /* clear timer 0 mode bits */
TMOD |= 0x01; /* put timer 0 into 16-bit no prescale */
TL0 = (TIMER0_COUNT & 0x00FF);
TH0 = (TIMER0_COUNT >> 8);
PT0 = 0; /* set low priority for timer 0 */
ET0 = 1; /* enable timer 0 interrupt */
TR0 = 1; /* start timer 0 */
EA = 1; /* enable interrupts */	 

a=4;
b=7;
c=9;
d=9*7+4;

   printf("%i", d);
 
}
char putchar(char charIN)
{
unsigned char iter = 0;
if (charIN != '\n') // not a new line
{
if ((charIN & 0x80) == 0) 
{ // translation necesssary
charIN = translation_table[charIN];
} // quick lookup

for (iter = 0; iter <7; iter++) 
{ // shift the digits left
LCD_digits[iter] = LCD_digits[iter+1];
}
LCD_digits[7] = charIN; // new digit is rightmost
}

if (charIN == 0x00) 
{ // couldn't interpret OR space
charIN = ' '; 
} // return space
return charIN; // just like putchar
}



List of 9 messages in thread
TopicAuthorDate
printf and putchar lcd driver            01/01/70 00:00      
   Why so much code expansion?            01/01/70 00:00      
      RE:printf and putchar lcd driver            01/01/70 00:00      
   Solved first problem,now second one            01/01/70 00:00      
      Resistors?            01/01/70 00:00      
   y cannot edit previous thread            01/01/70 00:00      
      Mistake?            01/01/70 00:00      
      try to contact the Webmaster            01/01/70 00:00      
   ANG KAH BENG            01/01/70 00:00      

Back to Subject List