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

📄 lcd.c

📁 33个毕业设计单片机类.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <iom16v.h>
#include <macros.h>

#define EN  3
#define RW  4
#define DI  5
#define CSA 6
#define CSB 7

unsigned char blank[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char hzzhi[32]={0x10,0x14,0x13,0x92,0x7E,0x32,0x52,0x92,0x00,0x7C,0x44,0x44,0x44,0x7C,0x00,0x00,
0x00,0x01,0x01,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00};//智
unsigned char hznen[32]={0x10,0xB8,0x97,0x92,0x90,0x94,0xB8,0x10,0x00,0x7F,0x48,0x48,0x44,0x74,0x20,0x00,
0x00,0xFF,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x3F,0x44,0x44,0x42,0x72,0x20,0x00};//能
unsigned char hzxin[32]={0x10,0x12,0x92,0x7E,0x12,0x12,0xFE,0x12,0x12,0x10,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x40,0x42,0x49,0x48,0x48,0x48,0x49,0x7E,0x48,0x48,0x48,0x4A,0x4C,0x4B,0x40,0x00};//型
unsigned char hzchong[32]={0x00,0x04,0x84,0xC4,0xA4,0xB4,0x9D,0x96,0x84,0x94,0xA4,0xC4,0x84,0x04,0x00,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x41,0x40,0x70,0x00,0x00};//充
unsigned char hzdian[32]={0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};//电
unsigned char hzqi[32]={0x40,0x40,0x4F,0x49,0x49,0xC9,0xCF,0x70,0xC0,0xCF,0x49,0x59,0x69,0x4F,0x00,0x00,
0x02,0x02,0x7E,0x45,0x45,0x44,0x7C,0x00,0x7C,0x44,0x45,0x45,0x7E,0x06,0x02,0x00};//器
unsigned char hzchi[32]={0x10,0x60,0x02,0x8C,0x60,0x80,0xF8,0x40,0x40,0xFE,0x20,0x20,0x10,0xF0,0x00,0x00,
0x08,0x08,0x7C,0x03,0x00,0x00,0x3F,0x40,0x40,0x5F,0x40,0x42,0x44,0x43,0x70,0x00};//池
unsigned char hzzhuang[32]={0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,
0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00};//状
unsigned char hztai[32]={0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00};//态
unsigned char hzya[32]={0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,
0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00};//压
unsigned char hzliu[32]={0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,
0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00};//流
unsigned char hzwen[32]={0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00};//温
unsigned char hzdu[32]={0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00};//度
unsigned char hzman[32]={0x10,0x61,0x06,0xE0,0x04,0xA4,0xA4,0xEF,0xA4,0xA4,0xE4,0xAF,0xA4,0xA4,0x24,0x00,
0x08,0xF8,0x07,0x00,0x00,0xFF,0x08,0x07,0x14,0x08,0x07,0x44,0x88,0x7F,0x00,0x00};//满
unsigned char hzjuan[32]={0x08,0x30,0x01,0xC6,0x30,0xC0,0x5E,0x52,0x52,0x52,0x52,0x52,0x5E,0xC0,0x00,0x00,
0x04,0x04,0xFF,0x00,0x00,0xFF,0x05,0x05,0x05,0x05,0x05,0x45,0x85,0x7F,0x00,0x00};//涓
unsigned char hzkuai[32]={0x70,0x00,0xFF,0x08,0xB0,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0xF8,0x80,0x80,0x00,
0x00,0x00,0xFF,0x00,0x80,0x40,0x30,0x0E,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00};//快
unsigned char hzfang[32]={0x08,0x08,0xF8,0x49,0x4E,0xC8,0x88,0x40,0x38,0xCF,0x0A,0x08,0x88,0x78,0x08,0x00,
0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x40,0x20,0x10,0x0B,0x0E,0x31,0x60,0x20,0x00};//放
unsigned char hznie[32]={0x40,0x30,0x2F,0xE4,0x24,0x24,0x00,0xFE,0xAA,0xAA,0xAB,0xAA,0xAA,0xFE,0x00,0x00,
0x01,0x01,0x01,0x7F,0x21,0x11,0x42,0x22,0x1A,0x06,0xFF,0x0A,0x12,0x22,0x22,0x00};//镍
unsigned char hzge[32]={0x40,0x30,0xEF,0x24,0x24,0x04,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x00,
0x01,0x01,0xFF,0x41,0x21,0x00,0xFF,0x00,0x05,0x06,0x7C,0x06,0x45,0x80,0x7F,0x00};//镉
//unsigned char hzqing[32]={0x00,0x10,0xA8,0xA6,0xAB,0xAA,0xAA,0xAA,0xAA,0xAA,0x2A,0xEA,0x0A,0x0A,0x00,0x00,
//0x00,0x88,0x88,0x98,0x94,0x94,0xF2,0x92,0x95,0x94,0x88,0x9F,0x60,0x80,0xE0,0x00};//氢
//unsigned char hzli[32]={0x40,0x30,0x2C,0xE7,0x24,0x24,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x00,
//0x02,0x02,0x02,0xFF,0x42,0x22,0x92,0x84,0x84,0x84,0xFF,0x84,0x84,0x84,0x80,0x00};//锂
unsigned char hzmh[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//冒号
//节
unsigned char hzjie[32]={0x04,0x04,0x44,0x44,0x44,0x5F,0xC4,0x44,0x44,0x44,0x5F,0x44,0xC4,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x08,0x10,0x0F,0x00,0x00,0x00};
//数
unsigned char hzshu[32]={0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00};
//下划线
//unsigned char sym_xhx[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
//摄氏度
//unsigned char sym_du[32]={0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
//0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00};
/*--  文字:  V  --*/
unsigned char chr_v[16]={0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00};
/*--  文字:  A  --*/
unsigned char chr_a[16]={0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20};
/*--  文字:  0  --*/
unsigned char num_0[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
/*--  文字:  1  --*/
unsigned char num_1[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
/*--  文字:  2  --*/
unsigned char num_2[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};
/*--  文字:  3  --*/
unsigned char num_3[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};
/*--  文字:  4  --*/
unsigned char num_4[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};
/*--  文字:  5  --*/
unsigned char num_5[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};
/*--  文字:  6  --*/
unsigned char num_6[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};
/*--  文字:  7  --*/
unsigned char num_7[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};
/*--  文字:  8  --*/
unsigned char num_8[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};
/*--  文字:  9  --*/
unsigned char num_9[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};
/*--  文字:  .  --*/
unsigned char num_p[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};


//#define EN245 7
/*(PORTC7)en245 : 0 enable245;1 disable245*/
//#define DIR245 6
/*(PORTC6)dir245: 0 read; 1 write*/

unsigned char DATA;
unsigned char tims1;
unsigned char tims2;
unsigned int  b_v;
unsigned int  b_a;
unsigned char b_t;
unsigned char b_n;
unsigned char b_s;
//ICC-AVR application builder : 2005-6-21 23:10:06
// Target : M16
// Crystal: 7.3728Mhz


void port_init(void)
{
 PORTA = 0xF8;
 DDRA  = 0xF8;
 PORTB = 0xFF;
 DDRB  = 0xFF;//output
 PORTC = 0xFF; //m103 output only
 DDRC  = 0xFF;
 PORTD = 0xFF;
 DDRD  = 0x37;
}

//Watchdog initialisation
// prescale: 2048K cycles
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x02; //WATCHDOG ENABLED - dont forget to issue WDRs
}

//TIMER0 initialisation - prescale:64
// WGM: Normal
// desired value: 1mSec
// actual value:  0.998mSec (0.2%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x8D; //set count
 OCR0  = 0x73;  //set compare
 TCCR0 = 0x03; //start timer
}

//TIMER1 initialisation - prescale:1
// WGM: 11) PWM phz correct, TOP=OCRnA
// desired value: 1KHz
// actual value:  1.000KHz (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x00; //setup
 TCNT1L = 0x00;
 OCR1AH = 0x0E;
 OCR1AL = 0x66;
 OCR1BH = 0x0E;
 OCR1BL = 0x66;
 ICR1H  = 0x0E;
 ICR1L  = 0x66;
 TCCR1A = 0xF3;
 TCCR1B = 0x00; //start Timer
}

//TIMER2 initialisation - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value:  9.861mSec (1.4%)
void timer2_init(void)
{
 TCCR2 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT2 = 0x04; //setup
 OCR2  = 0xFC;
 TCCR2 = 0x06; //start
}


//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 watchdog_init();
 timer0_init();
 timer1_init();
 timer2_init();
 MCUCR = 0x00;
 GICR  = 0x00;
 //TIMSK = 0x41; //timer interrupt sources
 TIMSK = 0x41; //timer interrupt sources
 SEI(); //re-enable interrupts
}

///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//PORTB-->data
//PA3->EN;PA4->DI;PA5->CSA;PA6->CSB;PA7->RW;
void WriteCom(unsigned char area,unsigned char com)
{
  //area=0-->left;1-->mid;2-->right
	//area=[csa,csb]00:L 01:M 10:R
  unsigned char lcd_busy;
	switch(area)
	{
	  case 0:
		  PORTA &=~ (1<<CSA);
			PORTA &=~ (1<<CSB);
		  break;
		case 2:
		  PORTA &=~ (1<<CSA);
			PORTA |=  (1<<CSB);
			break;
		case 1:
		  PORTA |=  (1<<CSA);
			PORTA &=~ (1<<CSB);
			break;
	}
	PORTA &=~ (1<<DI);
	PORTA |=  (1<<RW);

	do{
	  DDRB   =  0xFF;
		PORTB  =  0xFF;
	  PORTA |=  (1<<EN);
		DDRB   =  0;
		lcd_busy=PINB;
	  PORTA &=~ (1<<EN);
		lcd_busy=lcd_busy>>7;
	}while(lcd_busy);
	PORTA &=~ (1<<RW);
  DDRB   =  0xFF;
	PORTB  =  com;
	PORTA |=  (1<<EN);
	PORTA &=~ (1<<EN);
}

void WriteDat(unsigned char area,unsigned char dat)
{
  //area=0-->left;1-->mid;2-->right
	//area=[csa,csb]00:L 01:M 10:R
//  unsigned char lcd_busy;
	switch(area)
	{
	  case 0:
		  PORTA &=~ (1<<CSA);
			PORTA &=~ (1<<CSB);
		  break;
		case 2:
		  PORTA &=~ (1<<CSA);
			PORTA |=  (1<<CSB);
			break;
		case 1:
		  PORTA |=  (1<<CSA);
			PORTA &=~ (1<<CSB);
			break;
	}
	PORTA &=~ (1<<DI);//DI=0
	PORTA |=  (1<<RW);//RW=1
/*	do{
		DDRB   =  0xFF;    //PORT B AS OUTPUT
	  PORTB  =  0xFF;
	  PORTA |=  (1<<EN);//EN=1
		DDRB   =  0;       //PORT B AS INPUT
	  lcd_busy=PINB>>7;
	  PORTA &=~ (1<<EN);
		//PORTD &=~ (1<<0);
	}while(lcd_busy);*/
  //PORTD |=  (1<<0);
	PORTA |=  (1<<DI);
	PORTA &=~ (1<<RW);
	DDRB   =  0xFF;    //PORT B AS OUTPUT
	PORTB  =  dat;
	PORTA |=  (1<<EN);
	PORTA &=~ (1<<EN);
}

⌨️ 快捷键说明

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