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

📄 main.c

📁 AVR Atmeg169 LCD笔段驱动 三洋打印头驱动 C语言
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <twi.h>
#include <avr/pgmspace.h>
#include <string.h> 
#include <stdio.h>
#include <deprecated.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <math.h>

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long int

#define FREQ		8

//*************************************************
#define PowerPort	PORTB
#define Open  PB2	

#define KeyPort  	PORTD
#define TEP		 	1
#define TIM_SIG		2
#define SELECT		4		//JIA
#define JIAN		8
#define JIA 		16		//PRINT
#define PRINT		32		//CLEAR
#define CLEAR		64		//SELECT

//*************************************************
static uchar High2= 12;
static uchar H_Buf[2] = {0};
static double Low3 = 0;
static double Low3_Mid = 0;
static double ACD_BUF = 0;
static double ACD1_BUF = 0;
static uchar L_Buf[5] = {'0','0','0','0','0'};
static uchar Flag_New = 1;
static double DYB = 0.0048;

static uchar  Huan_G = 1;
static uchar  Fang_Ad = 0;
//*************************************************
struct Table {
				uchar  Gs;
				uchar  Flag;
				double   number;
			  };
struct Table Table1[13];  
//*************************************************
void DelayMs(uint t)
{
	uint i;
	for(i =0;i<t;i++)
		_delay_loop_2( 250*FREQ	);
}


//************Table*******************
static uchar  AA0[7] = {0x3C,0x42,0x42,0x3C,0x00,0x00,0x00};		//0
static uchar  AA1[7] = {0x00,0x44,0x7C,0x40,0x00,0x00,0x00};		//1
static uchar  AA2[7] = {0x00,0x66,0x52,0x4E,0x00,0x00,0x00};		//2
static uchar  AA3[7] = {0x00,0x66,0x4A,0x76,0x00,0x00,0x00};		//3
static uchar  AA4[7] = {0x18,0x24,0x7E,0x20,0x00,0x00,0x00};		//4
static uchar  AA5[7] = {0x00,0x6E,0x4A,0x7A,0x00,0x00,0x00};		//5
static uchar  AA6[7] = {0x3C,0x4A,0x4A,0x38,0x00,0x00,0x00};		//6
static uchar  AA7[7] = {0x00,0x02,0x7A,0x06,0x00,0x00,0x00};		//7
static uchar  AA8[7] = {0x36,0x4A,0x4A,0x76,0x00,0x00,0x00};		//8
static uchar  AA9[7] = {0x1C,0x52,0x52,0x3C,0x00,0x00,0x00};		//9


static uchar   BB1[8] = {0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00};	//-


static uchar  ZF_K[7] = {0x80,0xFF,0x88,0x94,0xA2,0xC1,0x80};		//K	
static uchar  ZF_F[7] = {0x80,0xFF,0x89,0x89,0x89,0x81,0x80};		//F
static uchar  ZF_Z[7] = {0x80,0xE1,0xD1,0xC9,0xC5,0xC3,0x80};		//Z
static uchar  ZF_d[7] = {0x80,0x80,0xE0,0xE0,0x80,0x80,0x80};		//.
static uchar  ZF1[7] =  {0x80,0x88,0x88,0x88,0x88,0x88,0x80};		//-
static uchar  ZF_K1[7] ={0x80,0xFF,0x88,0x94,0xA2,0xC1,0x80};		//K	
static uchar  ZF_e[7] = {0x80,0xB8,0xD4,0xD4,0xD4,0x98,0x80};		//e
static uchar  ZF_n[7] = {0x80,0xFC,0x88,0x84,0x84,0xF8,0x80};		//n
static uchar  ZF_nn[7] ={0x80,0xFC,0x88,0x84,0x84,0xF8,0x80};		//n
static uchar  ZF_z[7] = {0x80,0xC4,0xE4,0xD4,0xCC,0xC4,0x80};		//z
static uchar  ZF_ee[7] ={0x80,0xB8,0xD4,0xD4,0xD4,0x98,0x80};		//e
static uchar  ZF_i[7] = {0x00,0x48,0x7A,0x40,0x00,0x00,0x00};		//i
static uchar  ZF_c[7] = {0x00,0xE0,0x90,0x90,0x00,0x00,0x00};		//c
static uchar  ZF_h[7] = {0x42,0x7E,0x48,0x78,0x40,0x00,0x00};		//h
static uchar  ZF_ee1[7] = {0x00,0x78,0x54,0x58,0x00,0x00,0x00};		//e
static uchar  ZF_n1[7] = {0x00,0x78,0x08,0x78,0x00,0x00,0x00};		//n


static uchar  ZF_21[7]= {0x01,0x01,0x01,0x01,0x01,0x01,0x01};		//' '
static uchar  ZF_2K[7]= {0x7E,0x18,0x24,0x42,0x00,0x00,0x00};		//K	
static uchar  ZF_2i[7]= {0x00,0x48,0x7A,0x40,0x00,0x00,0x00};		//i		
static uchar  ZF_2l[7]= {0x00,0x84,0xFC,0x80,0x00,0x00,0x00};		//l
static uchar  ZF_2o[7]= {0x38,0x44,0x44,0x44,0x38,0x00,0x00};		//o
static uchar  ZF_2m[7]= {0x3C,0x04,0x3C,0x04,0x3C,0x00,0x00};		//m
static uchar  ZF_2e[7]= {0x00,0x78,0x54,0x58,0x00,0x00,0x00};		//e
static uchar  ZF_2t[7]= {0x00,0x08,0x3E,0x28,0x00,0x00,0x00};		//t
static uchar  ZF_22e[7]= {0x00,0x78,0x54,0x58,0x00,0x00,0x00};		//e
static uchar  ZF_2r[7]= {0x7E,0x18,0x0C,0x04,0x02,0x00,0x00};		//r
static uchar  ZF_2s[7]= {0x58,0x54,0x54,0x34,0x00,0x00,0x00};		//s
static uchar  ZF_22t[7]= {0x00,0x08,0x3E,0x28,0x00,0x00,0x00};		//t
static uchar  ZF_2a[7]= {0x30,0x4A,0x4A,0x3C,0x00,0x00,0x00};		//a
static uchar  ZF_2n[7]= {0x78,0x04,0x04,0x78,0x00,0x00,0x00};		//n
static uchar  ZF_2d[7]= {0x30,0x48,0x48,0x7E,0x00,0x00,0x00};		//d


static uchar  ZF_Z1[7] = {0x61,0x51,0x49,0x45,0x43,0x00,0x00};		//Z
static uchar  ZF_y[7] = {0x46,0x28,0x18,0x06,0x00,0x00,0x00};		//y
static uchar  ZF_l[7] = {0x00,0x41,0x7F,0x40,0x00,0x00,0x00};		//l
static uchar  ZF_SD[7]= {0x00,0x60,0x60,0x00,0x00,0x00,0x00};		//.


static uchar  ZF_B[7] = {0xFE,0x92,0x92,0x92,0x6C,0x00,0x00};		//B
static uchar  ZF_4a[7]= {0x24,0x54,0x54,0x78,0x00,0x00,0x00};		//a
static uchar  ZF_4r[7]= {0x7C,0x08,0x04,0x04,0x00,0x00,0x00};		//r


static uchar  ZF_5D[7]= {0x7F,0x41,0x41,0x22,0x1C,0x00,0x00};		//D
static uchar  ZF_5a[7] ={0x24,0x54,0x54,0x78,0x00,0x00,0x00};		//a
static uchar  ZF_5t[7]= {0x00,0x08,0x3E,0x28,0x00,0x00,0x00};		//t
static uchar  ZF_5u[7]= {0x78,0x80,0x80,0xF8,0x00,0x00,0x00};		//u
static uchar  ZF_5m[7]= {0xF8,0x08,0xF0,0x08,0xF0,0x00,0x00};		//m


static uchar  ZF_6U[7]= {0x7E,0x80,0x80,0x80,0x7E,0x00,0x00};		//U
static uchar  ZF_6n[7]= {0xF8,0x04,0x04,0xF8,0x00,0x00,0x00};		//n
static uchar  ZF_6t[7]= {0x00,0x08,0x3E,0x28,0x00,0x00,0x00};		//t
static uchar  ZF_6e[7]= {0x70,0xA8,0xA8,0xB0,0x00,0x00,0x00};		//e
static uchar  ZF_6r[7]= {0x7C,0x08,0x04,0x04,0x00,0x00,0x00};		//r
static uchar  ZF_6s[7]= {0x90,0xA8,0xA8,0x48,0x00,0x00,0x00};		//s
static uchar  ZF_6c[7]= {0x70,0x88,0x88,0x88,0x00,0x00,0x00};		//c
static uchar  ZF_6h[7]= {0xFE,0x08,0x08,0xF0,0x00,0x00,0x00};		//h
static uchar  ZF_61r[7]= {0x7C,0x08,0x04,0x04,0x00,0x00,0x00};		//r
static uchar  ZF_6i[7]= {0x00,0x88,0xFA,0x80,0x00,0x00,0x00};		//i
static uchar  ZF_6f[7]= {0x08,0xFC,0x0A,0x0A,0x00,0x00,0x00};		//f
static uchar  ZF_61t[7]= {0x00,0x08,0x3E,0x28,0x00,0x00,0x00};		//t

static uchar  ZF_DD[7] = {0x00,0x00,0x6C,0x6C,0x00,0x00,0x00};		//:
static uchar  ZF_MM[7] = {0xFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
static uchar  ZF_dD[7] = {0x00,0x60,0x60,0x00,0x00,0x00,0x00};		//.


static uchar  Print_Buf[5] = {0};
static uchar  Print_Flag =0;

#define FALSE   0
#define TRUE    (!FALSE)
#define COM0    0
#define COM1		1
#define COM2    2
#define COM3    3

#define SEG0    0	
#define SEG1    1	
#define SEG2    2	
#define SEG3    3	
#define SEG4    4	
#define SEG5    5	
#define SEG6    6	
#define SEG7    7	
#define SEG8    8	
#define SEG9    9	

char Wz;
//			  A B C D E F G
char A0[7] = {1,1,1,1,1,1,0};				//	0
char A1[7] = {0,1,1,0,0,0,0};				//	1
char A2[7] = {1,1,0,1,1,0,1};				//	2
char A3[7] = {1,1,1,1,0,0,1};				//	3
char A4[7] = {0,1,1,0,0,1,1};				//	4
char A5[7] = {1,0,1,1,0,1,1};				//	5
char A6[7] = {1,0,1,1,1,1,1};				//	6
char A7[7] = {1,1,1,0,0,0,0};				//	7
char A8[7] = {1,1,1,1,1,1,1};				//	8
char A9[7] = {1,1,1,1,0,1,1};				//	9

char *pA;
uchar CS1,CS2,CS3,CS4,CS5,CS6,CS7,S6,S5;
uchar Flag;
/*===================================*/
//char PIN[4][9]={0,0,0,0,0,0,0,0,0};

void Write_SEG(char X,char *p)
{
	uchar i,j;
	uchar x;
	uchar Buf;
	x = X;
	for(i=0;i<7;i++)
	{
		Buf = *(p+i);
		if(Buf>0)
		{
			if(i == 0)							//A
			{
				CS4 |=(1<<(x*2-2));
			}
			if(i == 1)							//B
			{
				CS3 |=(1<<(x*2-2));
			}
			if(i == 2)							//C
			{
				CS2 |=(1<<(x*2-2));
			}
			if(i == 3)							//D
			{
				CS1 |=(1<<(x*2-2));
			}
			if(i == 4)							//E
			{
				if(x != 4)
				{
					CS2 |= (1<<(x*2-1));
				}
				else
					CS5 = 1;
			}
			if(i == 5)							//F
			{
				if(x !=4)
				{
					CS4 |= (1<<(x*2-1));
				}
				else
					CS7 = 1;
			}
			if(i == 6)							//G
			{
				if(x != 4)
				{
					CS3 |= (1<<(x*2-1));
				}
				else
					CS6 = 1;
			}

		}
	}


}
/*===================================*/
void Write_Dat(char X,char Date)
{
	uchar i,j;
	uchar Y=0;
	uchar Buff;
	if((X==0) && (Date!='0'))
		{
			CS4 |=0X80;
			Flag = 1;
		}
	if(X > 0)
	{
		switch(Date)
		{
			case '0' : pA = A0;
						break;
			case '1' : pA = A1;
						break;
			case '2' : pA = A2;
						break;
			case '3' : pA = A3;
						break;
			case '4' : pA = A4;
			        	break;
			case '5' : pA = A5;
			        	break;
			case '6' : pA = A6;
						break;
			case '7' : pA = A7;
						break;
			case '8' : pA = A8;
						break;
			case '9' : pA = A9;
						break;							
		}
	}
	if(X>0)
		Y = 5-X;
	switch(Y)
	{
		case 1 :  {
							Write_SEG(Y,pA);
								break;
				  }
		case 2 :  {
						if(Flag || Date > '0')
						{
							Write_SEG(Y,pA);
							Flag = 1;
						}
						break;
				   }
		case 3 :  {
						if(Flag || (Date>'0'))
						{
							Write_SEG(Y,pA);
							Flag = 1;
						}
								break;
				  }
		case 4 :  {
						if(Flag || (Date>'0'))
						{
							Write_SEG(Y,pA);
							Flag =1;
						}
								break;
				  }		
	}
}

//***************************************************************
void Open_ADC0(void)
{
	ADMUX = 0x00;
	ADCSRA |= _BV(ADSC);
}
//*************************************************************
void Open_ADC1(void)
{
	ADMUX = 0x01;
	ADCSRA |= _BV(ADSC);
}
//**************************************************************
void Open_ADC2(void)
{
	ADMUX = 0x02;
	ADCSRA |= _BV(ADSC);
}
//***************************************************************
void ADC_Init(void)
{
	ADMUX = 0x00;
	ADCSRA = 0x87;
}
//***************************************************************
//SIGNAL(SIG_LCD)
//{
//	uint b;
//	b = 0;
//	b = 1;
//}
//***************************************************************
uint ACD0_Data,ACD1_Data,ACD2_Data;
uchar ACD_Gs=0;

SIGNAL(SIG_OUTPUT_COMPARE0)
{
	uint ret,ret1,ret2;
	uchar a;
	if ( Huan_G ==0)
	{
		ACD_Gs ++;
		if( ACD_Gs < 51)
		{
			Open_ADC0();
			while(ADCSRA & _BV(ADSC));
			ret = ADCL;
			ret |= (uint)( ADCH << 8 );
			ACD0_Data += ret;
			Open_ADC1();
			while(ADCSRA & _BV(ADSC));
			ret1 = ADCL;
			ret1 |= (uint)( ADCH << 8);
			ACD1_Data += ret1;
			Open_ADC2();
			while(ADCSRA & _BV(ADSC));
			ret2 = ADCL;
			ret2 |= (uint)(ADCH << 8);
			ACD2_Data = ret2;
		}
		else
		{
			//ACD1_BUF = (ACD1_Data/ 50) * DYB;
			//ACD_BUF = (ACD0_Data/ 50) * DYB;
			//if ( ACD_BUF <= 2.45)//43)
		//		Low3 = 0;
		//	else
		//		if( ACD_BUF < 4.40)
		//		{
		//			Low3 = (ACD_BUF -2.45)/0.078;// 2.43)/0.078;
		//		}
		//		else
		//		{
		//			Low3 = (( ACD1_BUF-2.3)/0.0393)+25;//(ACD1_BUF-1.22)/0.041;
		//		}
		//*************			
			ACD_BUF = ACD1_Data/50;
			Low3_Mid= (ACD_BUF-250)/8.36;
		//X	if( Fang_Ad == 1)
		//X	{
				if( Low3_Mid> Low3 )
					Low3 = Low3_Mid;
				if(Low3<1)
					Low3 = 0;
		//X	}
		//X	else
		//X	{
		//X		Fang_Ad ++;
		//X	}
			ACD_Gs = 0;
			ACD0_Data = 0;
			ACD1_Data = 0;
			ACD2_Data = 0;
		}
	}
	TCNT0 = 0x00;	
}

//************TO 比较中断*****************************************
void Time0_Init(void)
{
	TCCR0A = 0X0D;
	OCR0A  = 0x4E;	
}
//************************************************************
void Open_Time0(void)
{
	TIMSK0 |= _BV(OCIE0A);
}
//************************************************************
void Close_Time0(void)
{
	TIMSK0 &= ~_BV(OCIE0A);
}
//***************************************************************
void LCD_Init (void)
{
    LCDCRA = (1<<LCDEN) ;//|(1<<LCDIE); 
	LCDCRB = (1<<LCDMUX0) | (1<<LCDMUX1);	//(1<<LCDCS) | 
    LCDFRR = (1<<LCDPS2) | (1<<LCDPS1) | (1<<LCDPS0 )|(1<<LCDCD1)|(1<<LCDCD0); //| (1<<LCDCD0);    //32768 K=8 N=16  CKlcd = 64Hz
    LCDCCR = (1<<LCDCC3); 
}

uint Data=0;
uchar S[5]={0,0,0,0,0};
uchar Buff1;
//*******************************
void Open_Power(void)
{
	sbi(PowerPort,Open);
}
//*******************************
void Close_Power(void)
{
	cbi(PowerPort,Open);
}
//*******************************
void Clear_Cs(void)
{
		CS1=0;
		CS2=0;
		CS3=0;
		CS4=0;
		CS5=0;
		CS6=0;
		CS7=0;
		S5 =0 ;
		S6 = 0;
		Flag=0;
}
//*******************************
uchar  Key(void)
{
	uchar a;
	a = PIND;
	if( (a & TEP) == 0 )
		{
			do
			{
				a = PIND;
			}while((a & TEP) == 0 );
			return TEP;
		}
	//if( (a & TIM_SIG) == 0 )
	//	return TIM_SIG;
	if( (a & JIA) == 0 )
		{
			do
			{
				a = PIND;
			}while((a & JIA) == 0 );
			return JIA;
		}
	if( (a & JIAN) == 0 )
		{
			do
			{
				a = PIND;
			}while((a & JIAN) == 0 );
			return JIAN;
		}
	if( (a & PRINT ) == 0 )
		{
			do
			{
				a = PIND;
			}while((a & PRINT) == 0 );
			return PRINT;
		}
	if( (a & CLEAR) == 0 )
		{
			do
			{
				a = PIND;
			}while((a & CLEAR) == 0 );
			return CLEAR;
		}
	if( (a & SELECT) == 0 )
    	{
			do
			{
				a = PIND;
			}while((a & SELECT) == 0 );
			return SELECT;
		}
	else
		return 0;

}
//************************************
void Display(void)
{
	uchar i,j,len;
	uchar Flag_Wz;
	uchar Flag_Ydian=0;
	uchar *P;
	//****************缸数*************************
	Clear_Cs();
	itoa(High2,H_Buf,10);
	len = strnlen(H_Buf,5);
	if (len == 2 )
	{
		for(i=0;i<2;i++)
		{
			Buff1 = *(H_Buf+i);
			Write_Dat(i,Buff1);
		}
	}
	else
	{
		Buff1 = *(H_Buf);
		Write_Dat(1,Buff1);
	}
	//******************************************
	if( Flag_New == 0 )
	{
		dtostrf(Low3,2,1,L_Buf);
		len =	strnlen(L_Buf,10);
		if( len >= 5 )
		{
			for(i=0;i<3;i++)
			{
				Buff1 = *(L_Buf+i);
				Write_Dat(5-3+i,Buff1);

			}
		}
		else
		{
			if( len == 4 )
			{
				S6 = 0x02;
				L_Buf[2] = L_Buf[3];
				for(i=0;i<3;i++)
				{
					Buff1 = *(L_Buf+i);
					Write_Dat(5-3+i,Buff1);
				}
			}
			if( len == 3 )

⌨️ 快捷键说明

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