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

📄 lcd.c

📁 atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作系统
💻 C
字号:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
char  character1[]="****************";
char  character2[]="智能电力管理系统";
char  character3[]="    版本号:01  ";
char  character4[]="北化航天工业学院";
char  character5[]="**系统starting**";
char  character6[]="初始化GSM.......";
char  character7[]="初始化TIME......";
char  character8[]="初始化DS18B20...";
char  character9[]="**发送短信......";
char  character10[]="**发送完成......";
char  character11[]="初始化GSM 完成..";
char  character12[]="初始化TIME完成..";

const char ssb[] PROGMEM="北华航天工业学院";
const char ssa[] PROGMEM="----光芒电子----";
const char ssd[] PROGMEM="智能油箱控制系统";
const char sse[] PROGMEM="**版本号 V0.11**";
#define SET_SCK PORTC|=0x04;//串行时钟线
#define CLR_SCK PORTC&=0xfb;
#define SET_SID PORTC|=0x02;//串行数据线
#define CLR_SID PORTC&=0xfd;
#define SET_CS PORTC|=0x01; //片选
#define CLR_CS PORTC&=0xfe;
const unsigned char adress_table[] PROGMEM=
{
 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,//第三行汉字位置
 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,//第四行汉字位置
};
/************************写入字节函数(内部)********************/
void delay(unsigned int);
void write_byte(unsigned char Data)			  //单纯写字节,8位字节SID为数据 SCLK为时钟
  {
   unsigned char i,Temp_data;
    for(i=0;i<8;i++)
     {
      Temp_data=Data;
      Temp_data<<=i;
      if(Temp_data&0x80) {SET_SID;}
      else {CLR_SID;}
	  delay(50);
      SET_SCK;
	  delay(50);
      CLR_SCK;
     }
  }
/************************延时函数**************************/
void delay(unsigned int t)
  {  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
        ; 
  }
/************************命令写入函数***************************/
void write_command(unsigned char command)		 //写命令
  {
   SET_CS;
   write_byte(0xF8);   //发送S_ID
   write_byte(command&0xF0); //发送H_data
   write_byte((command&0x0F)<<4); //发送L_data
   CLR_CS; 
  }
/************************数据写入函数***************************/
void write_data(unsigned char Data)			 //写数据
  {
   SET_CS;
   write_byte(0xFA);   //发送S_ID
   write_byte(Data&0xF0); //发送H_data
   write_byte((Data&0x0F)<<4); //发送L_data
   CLR_CS; 
  }
/************************LCD初始化函数***************************/
void LCD_Init(void)						      //LCD初始化
  {
   DDRC|=0X07;
   delay(200);
   write_command(0x30);                         //功能设置 8位数据,基本指令集
   delay(10);
   write_command(0x0C);                         //显示状态 ON,游标OFF,反白OFF
   delay(10);
   write_command(0x01);                         //清除显示
   delay(500);
   write_command(0x02); //地址归位
   write_command(0x80); //设置DDRAM地址
   write_command(0x01);                         //清除显示
  }
/************************字符串打印函数***************************/
void display_str(unsigned char row,unsigned char column,unsigned char *p)
  {
    write_command(0x30);
	//write_command(adress_table[row*8+column]);
	write_command(pgm_read_byte(adress_table+row*8+column));
	while((*p)!='\0')
     {write_data(*p++);
      column++;
     }
  }
void display_1str(unsigned char row,unsigned char column,unsigned char p)
  {
    write_command(0x30);
	write_command(pgm_read_byte(adress_table+row*8+column));
     write_data(p/10);
	 write_data(p%10);
	 write_data('%');
  }
void display_str2(unsigned char row,unsigned char column,char *p)
  {
    unsigned char j,i=0;
	j=1;
    write_command(0x30);
	//write_command(adress_table[row*8+column]);
	write_command(pgm_read_byte(adress_table+row*8+column));
	while((j)!='\0')
     {j=pgm_read_byte(p+i);
	  write_data(j);
      i++;
     }
  }


void  setpic(void)
  {
  unsigned char  i,j;
  LCD_Init();
  write_command(0x34);
  write_command(0x3c);// RE=1  扩展指令选择  G=1  开图形显示 
      
     for(j=0;j<16;j++)
     for(i=0;i<32;i++)
 	  {
       write_command(0x80+i);
       write_command(0x80+j);
       write_data(0x00);
       write_data(0x00);
      }
       write_command(0x3e);   
  }
/************************开文本函数***************************/
void settxt(void)
  {
   write_command(0x30);                         //功能设置 8位数据,基本指令集

  }
void hello(void)
  {
  display_str(0,0,character1);
  }
/************************绘图函数***************************/
/*void draw_pic(unchar x,unchar y,unchar *Draw)
  {
   unchar i, j, temp_x, temp_y;  //
   write_command(0x34);
   
   temp_x=x;
   temp_y=y;  
   temp_x |= 0x80;     //
   temp_y |= 0x80;     //
   for(i=0;i<32;i++ )    //上半屏32行
    {
     write_command(temp_y++);  //设置绘图区的Y地址坐标0
     write_command(temp_x);  //设置绘图区的X地址坐标0
     for(j=0;j<16;j++)   //
      {
       write_data(*Draw++); //
      }
    }
 
   temp_x = 0x88;     //
   temp_y = 0x80;     //
   j = 0;         //
   for(;i<64;i++ )		   //下半屏32行
    {
     write_command(temp_y++);  //设置绘图区的Y地址坐标0
     write_command(temp_x);  //设置绘图区的X地址坐标0
     for(j=0;j<16;j++)   //
      {
       write_data(*Draw++); //
      }
    }
	write_command(0x36);      //绘图ON,基本指令集里面36H不能开绘图
  }	 */









⌨️ 快捷键说明

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