⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mylcd.i

📁 This is Temperature PID regulator for Tamman ovens. Temperature is measured by thermocouple via lm35
💻 I
字号:

#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4;      
sfrb ADCSRA=6;
sfrb ADCSR=6;     
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e;   
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28;  
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a;  
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c;  
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb OCR0=0X3c;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

#asm
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x80
	.EQU __sm_mask=0x70
	.EQU __sm_powerdown=0x20
	.EQU __sm_powersave=0x30
	.EQU __sm_standby=0x60
	.EQU __sm_ext_standby=0x70
	.EQU __sm_adc_noise_red=0x10
	.SET power_ctrl_reg=mcucr
	#endif
#endasm

#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-

#pragma used+

char *strcat(char *str1,char *str2);
char *strcatf(char *str1,char flash *str2);
char *strchr(char *str,char c);
signed char strcmp(char *str1,char *str2);
signed char strcmpf(char *str1,char flash *str2);
char *strcpy(char *dest,char *src);
char *strcpyf(char *dest,char flash *src);
unsigned int strlenf(char flash *str);
char *strncat(char *str1,char *str2,unsigned char n);
char *strncatf(char *str1,char flash *str2,unsigned char n);
signed char strncmp(char *str1,char *str2,unsigned char n);
signed char strncmpf(char *str1,char flash *str2,unsigned char n);
char *strncpy(char *dest,char *src,unsigned char n);
char *strncpyf(char *dest,char flash *src,unsigned char n);
char *strpbrk(char *str,char *set);
char *strpbrkf(char *str,char flash *set);
char *strrchr(char *str,char c);
char *strrpbrk(char *str,char *set);
char *strrpbrkf(char *str,char flash *set);
char *strstr(char *str1,char *str2);
char *strstrf(char *str1,char flash *str2);
char *strtok(char *str1,char flash *str2);

unsigned int strlen(char *str);
void *memccpy(void *dest,void *src,char c,unsigned n);
void *memchr(void *buf,unsigned char c,unsigned n);
signed char memcmp(void *buf1,void *buf2,unsigned n);
signed char memcmpf(void *buf1,void flash *buf2,unsigned n);
void *memcpy(void *dest,void *src,unsigned n);
void *memcpyf(void *dest,void flash *src,unsigned n);
void *memmove(void *dest,void *src,unsigned n);
void *memset(void *buf,unsigned char c,unsigned n);
unsigned int strcspn(char *str,char *set);
unsigned int strcspnf(char *str,char flash *set);
int strpos(char *str,char c);
int strrpos(char *str,char c);
unsigned int strspn(char *str,char *set);
unsigned int strspnf(char *str,char flash *set);

#pragma used-
#pragma library string.lib

typedef char *va_list;

#pragma used+

char getchar(void);
void putchar(char c);
void puts(char *str);
void putsf(char flash *str);

char *gets(char *str,unsigned int len);

void printf(char flash *fmtstr,...);
void sprintf(char *str, char flash *fmtstr,...);
void snprintf(char *str, unsigned int size, char flash *fmtstr,...);
void vprintf (char flash * fmtstr, va_list argptr);
void vsprintf (char *str, char flash * fmtstr, va_list argptr);
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr);
signed char scanf(char flash *fmtstr,...);
signed char sscanf(char *str, char flash *fmtstr,...);

#pragma used-

#pragma library stdio.lib

typedef enum
{
CLEAR_LCD 			= 0x01, 
RETURN_TO_HOME 		= 0x02, 
ENTRY_LEFT 			= 0x04, 
ENTRY_RIGHT 		= 0x06, 
LCD_ON 				= 0x0C, 
BLINK_CHAR_ON 		= 0x0D, 
CURSOR_ON 			= 0x0E, 
BLINK_CURSOR_ON 	= 0x0F, 
SHIFT_CURSOR_LEFT 	= 0x10, 
SHIFT_CURSOR_RIGHT 	= 0x14, 
SHIFT_DISPLAY_LEFT  = 0x18, 
SHIFT_DISPLAY_RIGHT = 0x1C, 
MODE_8_BITS 		= 0x38, 
MODE_4_BITS 		= 0x22, 
MODE_2_LINES 		= 0x28	

} HD44780_CMD_t;       

#pragma used+

extern const unsigned char rowAdress[4];

#pragma used-

#pragma used+

void LCD_Init(void);
void LCD_SendNibble(unsigned char data);
void LCD_SendByte(unsigned char data);

unsigned char LCD_ReadByte(void);
void LCD_WaitBusyFlag(void);

void LCD_SendCharLine(unsigned char character, unsigned char repetition, HD44780_CMD_t direction, 
unsigned char speed);
void LCD_SendString_S(unsigned char *str);
void LCD_SendString_F(unsigned char flash *str);

void LCD_SendRunLine(flash unsigned char *str, unsigned char line, unsigned char repetition, 
unsigned char speed);
void LCD_SendTwoRunLines(flash unsigned char *str1, unsigned char line1, flash unsigned char *str2, 
unsigned char line2, unsigned char repetition, unsigned char speed);

void LCD_WriteMyChar(unsigned char flash *data, unsigned char adress);

#pragma used-

#pragma used+
const unsigned char rowAdress[4] = {0x80, 0xC0, 0x94, 0xD4};
#pragma used-

void LCD_SendNibble (unsigned char data)
{
PORTB     &= ~(1 << 1)                                  ;

PORTB     |= (1 << 0)               		         ;
delay_us(10);
PORTB     = (data & 0xF0             );
PORTB     &= ~(1 << 0)               		        ;

delay_ms(1);
}

void LCD_SendByte (unsigned char data)
{

PORTB     |= (1 << 0)               		         ;				            
PORTB     &= ~0xF0             ;   
PORTB     |= (data >> 4);        
PORTB     &= ~(1 << 0)               		        ;                          

delay_us(10);                   

PORTB     |= (1 << 0)               		         ;                          
PORTB     &= ~0xF0             ;
PORTB     |= (data & 0xF0             );
PORTB     &= ~(1 << 0)               		        ;

delay_us(100);                  
}

void LCD_SendString_S (unsigned char *str)
{
while(*str != 0)              
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(*str);		  
str++;					  
}
}

void LCD_SendString_F (unsigned char flash *str)
{
while(*str != 0)
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(*str);
str++;
}
}

void LCD_SendCharLine (unsigned char character, unsigned char repetition, HD44780_CMD_t direction,
unsigned char speed)
{
unsigned char i;

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(direction);            

for(i=0; i<(repetition + 1); i++)  
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(character);       

if(speed > 0)                  
{
delay_ms(speed);
}
}

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(ENTRY_RIGHT);          
}

void LCD_SendRunLine (flash unsigned char *str, unsigned char line, unsigned char repetition, unsigned char speed)
{

unsigned char i, x, y;
unsigned char strSize = strlenf(str);  

for(i=0; i<repetition; i++)            
{

for(x=0; x<((strSize - 20     + 1) + (20     * 2)); x++)
{
PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(rowAdress[line-1] + 0);        				;               

for(y=0; y<20    ; y++)  
{

if((x + y < 20    ) || (x + y > strSize + 20    ))
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(' ');
}
else 
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(str[x + y - 20    ]);  
}
}

delay_ms(speed);  
}
}
}

void LCD_SendTwoRunLines (flash unsigned char *str1, unsigned char line1, flash unsigned char *str2, 
unsigned char line2, unsigned char repetition, unsigned char speed)
{

unsigned char i, j, k1, k2;
unsigned char str1Size;
unsigned char str2Size;
unsigned char strSize;

str1Size = strlenf(str1);
str2Size = strlenf(str2);

if(str1Size > str2Size)
{
strSize = str1Size;
}
else
{
strSize = str2Size;
}

for(i = 0; i < repetition; i++)
{
for(j=0; j<((strSize - 20     + 1) + (20     * 2)); j++)
{

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(rowAdress[line1-1] + 0);        				;

for(k1=0; k1<20    ; k1++)
{
if((j + k1 < 20    ) || (j + k1 > str1Size + 20    ))
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(' ');
}
else
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(str1[j+k1-20    ]);
}
}

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(rowAdress[line2-1] + 0);        				;

for(k2=0; k2<20    ; k2++)
{
if((j + k2 < 20    ) || (j + k2 > str2Size + 20    ))
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(' ');
}
else
{
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(str2[j+k2-20    ]);
}
}

delay_ms(speed);
}
}
}

void LCD_WriteMyChar (unsigned char flash *data, unsigned char adress)
{
unsigned char i;

adress = (0x40 + (adress * 8));  

for(i=0; i<8; i++)         
{
PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(adress);   
PORTB     |= (1 << 1)                                   ;                             LCD_SendByte(*data);   
adress++;              
data++;                
}
}

void LCD_Init (void)
{
DDRB     |= (0xF0              | (1 << 0)               		   | (1 << 1)                                );

PORTB     &= ~(1 << 0)               		        ;
delay_ms(50);

LCD_SendNibble(MODE_8_BITS);
delay_ms(100);
LCD_SendNibble(MODE_8_BITS);
delay_ms(100);
LCD_SendNibble(MODE_8_BITS);
delay_ms(100);

LCD_SendNibble(MODE_4_BITS);
delay_ms(100);

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(MODE_2_LINES);
delay_ms(100);

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(ENTRY_RIGHT);
delay_ms(100);

PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(LCD_ON);
delay_ms(100);
PORTB     &= ~(1 << 1)                                  ;                               LCD_SendByte(CLEAR_LCD);                      delay_ms(2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -