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

📄 按键.c

📁 基于AVR单片机的热电偶测量系统源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <iom64v.h>
#include <macros.h>

#define enter 0x74
#define up 0xf0
#define down 0xe4
#define left 0xd4
#define right 0xb4
#define zuo 0x00
#define zhong 0x01
#define can1 0x02
#define can2 0x03

#define set_RS  PORTC|=BIT(3)
#define clr_RS  PORTC&=~BIT(3)

#define set_RD  PORTC|=BIT(5)
#define clr_RD  PORTC&=~BIT(5)

#define set_CS  PORTC|=BIT(1)
#define clr_CS  PORTC&=~BIT(1)

#define set_WR  PORTC|=BIT(4)
#define clr_WR  PORTC&=~BIT(4)

#define set_RESET PORTC|=BIT(2)
#define clr_RESET PORTC&=~BIT(2)

#define set_cs6675    PORTB|=BIT(0)
#define clr_cs6675    PORTB&=~BIT(0)

#define set_sck   PORTB|=BIT(1)
#define clr_sck   PORTB&=~BIT(1)
 
//=========================================== 
#define uint unsigned int 
#define uchar unsigned char 
//========================================= 

#define mSetDS1302SCK     PORTG|=BIT(0)    
#define mClrDS1302SCK     PORTG&= ~BIT(0) 
 
#define mSetDS1302RST     PORTG|=BIT(1) 
#define mClrDS1302RST     PORTG&= ~BIT(1) 

#define mSetDS1302IO      PORTG|=BIT(2) 
#define mClrDS1302IO      PORTG&= ~BIT(2) 
#define mTestDS1302IO     PING& BIT(2) 

#define mDS1302IO_In      DDRG &= ~BIT(2) 
#define mDS1302IO_Out     DDRG |= BIT(2) 
//========================================= 
#define mDS1302_SEC_Reg      0x80 
#define mDS1302_MIN_Reg      0x82 
#define mDS1302_HOUR_Reg     0x84   
#define mDS1302_CONTROL_Reg  0x8e 
#define mDS1302_CHARGER_Reg  0x90 
#define mDS1302_CLKBURST_Reg 0xbe 
//========================================= 

#define wait asm("nop\n nop")
#define _nop asm("nop")



#define MAXCOLUMN 131	//最大列数量
#define BLACK 0xff	//lcd全黑
#define WHITE 0x00	//lcd全白

#define YES 0x01
#define NO 0x00
#define DEL 0x01
#define SELECT 0x00

#define page_0 0x00	//lcd的页,共8页
#define page_1 0x01
#define page_2 0x02
#define page_3 0x03
#define page_4 0x04
#define page_5 0x05
#define page_6 0x06
#define page_7 0x07

static unsigned char entercount,leftcount,rightcount;
static unsigned char position1302,hh,mm,positioncanbi,canbianjian;
static unsigned int  time_array[6],canbi_array[5];

// //////////////////////////////////////////////////////////////////////////
//固定数据区
/////////////////////////////////////////////////////////////////////////
static const unsigned char arab_1[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
static const unsigned char arab_2[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};
static const unsigned char arab_3[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};
static const unsigned char arab_4[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};
static const unsigned char arab_5[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};
static const unsigned char arab_6[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};
static const unsigned char arab_7[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};
static const unsigned char arab_8[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};
static const unsigned char arab_9[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};
static const unsigned char arab_0[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
static const unsigned char T[16]={0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00};
static const unsigned char t[16]={0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00};
static const unsigned char maohao[16]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
static const unsigned char xiaoshudian[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};
static const unsigned char E[16]={0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00};
static const unsigned char l[16]={0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};
static const unsigned char g[16]={0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00};
static const unsigned char P[16]={0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00};
static const unsigned char H[8]={0x00,0x7E,0x10,0x7E,0x00,0x50,0x70,0x40};
static const unsigned char ll[8]={0x00,0x00,0x42,0x7E,0x42,0x00,0x00,0x00};
static const unsigned char lll[8]={0x00,0x00,0x42,0x7E,0x42,0x7E,0x42,0x00};
static const unsigned char zhenghao[16]={0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00};
static const unsigned char fuhao[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01};

void Send_Byte(unsigned char bdata)
{    
     set_CS;    //模拟时序信号
     set_CS;
	 set_RS;
	 set_WR;
	 _nop;

	//开始发送数据
	PORTA = bdata;    //将显示数据放在端口A 
    set_RS;
    clr_CS;
    clr_WR;
    _nop;
    clr_WR;
    _nop;
    set_WR;
    _nop;
    set_CS;
    set_RS;
}
void Send_Command(unsigned char cdata)
{    
     set_CS;
	 set_RS;
	 set_WR;
	 _nop;

	 //开始发送命令
	 PORTA = cdata;     //将命令字放在端口A
	 clr_RS;
	 clr_CS;
	 _nop;
	 clr_WR;
	 _nop;
	 set_WR;
	 _nop;
	 set_CS;
	 set_RS;
}



unsigned char Gen_Column_MSB(unsigned char column)
{
    unsigned char temp; //用于保存列数的高4bit命令字
    temp = column+0x04 ;	
    temp = temp >>4;  //右移4位,得到高4位的列数据
    temp |=0x10;   //00010000,将列地址的DB4置1
    return temp;
}


unsigned char Gen_Column_LSB(unsigned char column)
{
    unsigned char temp = column;
    
    temp = column+0x04 ;	
    temp &= 0x0f;	//取出column的低四位
    return temp;
}


unsigned char Gen_Page(unsigned char page)
{
    unsigned char temp;
    
    temp = page & 0x0f;
    temp |= 0xb0;   //得到显示数据页的控制字
    return temp;
}

void Initial_LCD(void)
{
	  Send_Command(0xe2);	//初始化内部功能(RESET),初始化初始显示线,列地址,页地址和普通
	  			            //输出地址状态到初始状态,但是不能影响显示数据RAM的内容
          wait;
	                        //等待2个时钟周期
	  Send_Command(0xaf);	//Display on
	  Send_Command(0x23);	//internal voltage regulator resistor ratio,(4.5)0x23
	  Send_Command(0x2f);	//内部供电VC=VR=VF:111,使内部VC,VR,VF的电压控制电路工作
	  Send_Command(0x40);	//初始化显示线在line address 0
	  Send_Command(0x81);	//设置参考电压模式对比度共64级	
	  Send_Command(0xa1);	
	  Send_Command(0xa1);	
	  Send_Command(0xa3);	//选择LCD偏置电压比率以驱动LCD,bias=1
	  Send_Command(0xa4);	//全亮显示,EON=0,normal display(不管显示RAM中有何数据)
	  Send_Command(0xb0);	//设置页地址为0
	  Send_Command(0x0c);   //选择COM(行地址)输出扫描方向,决定LCD驱动器的输出状态。SHL=0,normal direction(COM0-COM63)
	  Send_Command(0xad);	//设置STATIC INDICATOR STATUS(SM=1,STATIC INDICATOR ON)
	  Send_Command(0x03);	//STATUS OF STATIC INDICATOR OUTPUT ALWAYS ON
}

void Initial_MCU(void)
{
   
    DDRA=0xff;
    PORTA=0xff;
    DDRB=0x03;
    PORTB=0xff;
    DDRC=0xff;
    PORTC=0xff;
    PORTG=0x00;
    DDRG=0x00;
    DDRE=0xfe;
    PORTE=0xff;
}


void Clear_DDRAM(unsigned char c_page_start,unsigned char c_page_end)
{ 
	unsigned char i,j;
	unsigned char start_page;   //用于存放清除的起始页数
	unsigned char c_column_msb=0x10,c_column_lsb=0x04;  //清除的起始列为第4列
	
	start_page = Gen_Page(c_page_start);    //取得清除的起始页地址
	for(j=c_page_start;j<=c_page_end;j++)
	{
    	Send_Command(0x10);	//从第4列开始清除LCD显示的数据
        Send_Command(0x04);
        Send_Command(start_page);	//清除位置在第start_page页
        for(i=0;i<=127;i++)
        {
        	Send_Byte(WHITE);	//清除页内所有列显示的数据
        }
        start_page++;   //清除下一页数据
    }
}

//////////////////////////////////////////////////////////////////////////
//绘制一个8*8大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x8(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	  unsigned char i;
	  
	  Send_Command(Gen_Page(page));	//送页地址
	  Send_Command(Gen_Column_LSB(column));	//送低4位地址
	  Send_Command(Gen_Column_MSB(column));	//送高4位地址
	  for(i=0;i<=7;i++)	//水平宽度为8列
	  {
	  	  Send_Byte(*pdata);
	  	  pdata++;
	  }
}
//////////////////////////////////////////////////////////////////////////
//绘制一个8*16大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x16(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	   unsigned char i;
	   unsigned char j;
	   
	   for(j=0;j<=1;j++)
	   {
	   	   Send_Command(Gen_Page(page));
	       Send_Command(Gen_Column_LSB(column));
	       Send_Command(Gen_Column_MSB(column));  
     	   for(i=0;i<=7;i++)
	       {
	   	       Send_Byte(*pdata);
	   	       pdata++;
	       }
	       page++;
	   }
}
//////////////////////////////////////////////////////////////////////////
//绘制一个反白显示8*16大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x16_rev(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	   unsigned char i;
	   unsigned char j;
	   
	   for(j=0;j<=1;j++)
	   {
	   	   Send_Command(Gen_Page(page));
	       Send_Command(Gen_Column_LSB(column));
	       Send_Command(Gen_Column_MSB(column));  
     	   for(i=0;i<=7;i++)
	       {
	   	       Send_Byte(~(*pdata));
	   	       pdata++;
	       }
	       page++;
	   }
}


//////////////////////////////////////////////////////////////////////
//数值大小与阿拉伯数字之间的转换反白显示
//////////////////////////////////////////////////////////////////////
void Draw_NtoArab_rev(unsigned char page,unsigned char column,unsigned char number)
{
	switch(number)
	{
		  case 0x00:
		  	{
		  		  Bmp8x16_rev(page,column,arab_0);
		  		  break;
		  	}
		  case 0x01:
		  	{
		  		  Bmp8x16_rev(page,column,arab_1);
		  		  break;
		  		  
		  	}
		  case 0x02:
		  	{
		  		  Bmp8x16_rev(page,column,arab_2);
		  		  break;
		  	}
		  case 0x03:
		  {
		  	      Bmp8x16_rev(page,column,arab_3);
		  	      break;
		  }
		  case 0x04:
		  	{
		  		   Bmp8x16_rev(page,column,arab_4);
		  		   break;
		  	}
		  case 0x05:
		  	{
		  		   Bmp8x16_rev(page,column,arab_5);
		  		   break;
		  	}
		  case 0x06:
		  	{
		  		   Bmp8x16_rev(page,column,arab_6);
		  		   break;
		  	}
		  case 0x07:
		  	{
		  		   Bmp8x16_rev(page,column,arab_7);
		  		   break;
		  	}
		  case 0x08:
		  	{
		  		   Bmp8x16_rev(page,column,arab_8);
		  		   break;
		  	}
		  case 0x09:
		  	{
		  		   Bmp8x16_rev(page,column,arab_9);
		  		   break;
		  	}
		  default:
		  	{
		  		  Bmp8x16_rev(page,column,arab_0);
		  	}
		  	    break;
	}
}


//////////////////////////////////////////////////////////////////////
//数值大小与阿拉伯数字之间的转换显示
//////////////////////////////////////////////////////////////////////
void Draw_NtoArab(unsigned char page,unsigned char column,unsigned char number)
{
	switch(number)
	{
		  case 0x00:
		  	{
		  		  Bmp8x16(page,column,arab_0);
		  		  break;
		  	}
		  case 0x01:
		  	{
		  		  Bmp8x16(page,column,arab_1);
		  		  break;
		  		  
		  	}
		  case 0x02:
		  	{
		  		  Bmp8x16(page,column,arab_2);
		  		  break;
		  	}
		  case 0x03:
		  {
		  	      Bmp8x16(page,column,arab_3);
		  	      break;
		  }
		  case 0x04:
		  	{
		  		   Bmp8x16(page,column,arab_4);
		  		   break;
		  	}
		  case 0x05:
		  	{
		  		   Bmp8x16(page,column,arab_5);
		  		   break;
		  	}
		  case 0x06:
		  	{
		  		   Bmp8x16(page,column,arab_6);
		  		   break;
		  	}
		  case 0x07:
		  	{
		  		   Bmp8x16(page,column,arab_7);
		  		   break;
		  	}
		  case 0x08:
		  	{
		  		   Bmp8x16(page,column,arab_8);
		  		   break;
		  	}
		  case 0x09:
		  	{
		  		   Bmp8x16(page,column,arab_9);
		  		   break;
		  	}
		  default:
		  	{
		  		  Bmp8x16(page,column,arab_0);
		  	}
		  	    break;
	}
}


//////////////////////////////////////////////////////////////////////////
//绘制菜单界面
//////////////////////////////////////////////////////////////////////////
void Draw_Menu_Interface()
{     Bmp8x16(0x00,0x18,T);
	  Bmp8x16(0x00,0x20,maohao);
	  Bmp8x16(0x00,0x38,maohao);
	  Bmp8x16(0x00,0x50,maohao);
	  Bmp8x16(0x02,0x00,t);
	  Bmp8x16(0x02,0x08,maohao);
	  Bmp8x16(0x02,0x30,xiaoshudian);
	  Bmp8x16(0x02,0x40,E);
	  Bmp8x16(0x02,0x48,maohao);
	  Bmp8x16(0x02,0x70,xiaoshudian);
	  Bmp8x16(0x04,0x10,l);
	  Bmp8x16(0x04,0x18,g);
	  Bmp8x16(0x04,0x20,P);
	  Bmp8x8(0x04,0x28,ll);
	  Bmp8x8(0x05,0x28,H);
	  Bmp8x16(0x04,0x30,maohao);
	  Bmp8x16(0x04,0x50,xiaoshudian);
      Bmp8x16(0x06,0x10,l);
	  Bmp8x16(0x06,0x18,g);
	  Bmp8x16(0x06,0x20,P);
	  Bmp8x8(0x06,0x28,lll);
	  Bmp8x8(0x07,0x28,H);
	  Bmp8x16(0x06,0x30,maohao);
	  Bmp8x16(0x06,0x50,xiaoshudian);
      
}

void pDS1302_Write(uchar reg,uchar data) 
{ 
        uchar i; 
     
        mDS1302IO_Out; 
        mSetDS1302IO;  
        mClrDS1302RST;    
        wait;
	    mClrDS1302SCK; 
        wait;       
        mSetDS1302RST;
        wait; 
        for(i=0;i<8;i++) 
    {  
        if(reg&BIT(i)) 
                       mSetDS1302IO; 
        else           
                       mClrDS1302IO; 
        wait; 
        mSetDS1302SCK; 
        wait; 
        mClrDS1302SCK; 
        wait;        
    } 
         
    for(i=0;i<8;i++) 
    {  
        if(data&BIT(i))
                        mSetDS1302IO; 
        else 
                        mClrDS1302IO; 
        wait; 
        mSetDS1302SCK; 
        wait; 
        mClrDS1302SCK; 
        wait;
    } 
     
        wait; 
        mClrDS1302RST;
        wait;
} 

uchar pDS1302_Read(uchar reg) 

⌨️ 快捷键说明

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