📄 main._c
字号:
/****************** SMG12232ZK串行接口程序******************
*ICC-AVR application builder : 2007-10-18
* Target : M8
* Crystal: 8.0000Mhz
* Title : Accessing to LCD-CONTROLLER
* Date : 2007-10-18
* Support QQ: 16693799
* Create by : Joe Yuan
* DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER */
#include <iom48v.h> //ATMEGA48头文件
#include <macros.h> //宏定义
#include "initrialm48.h"//初始化mcu
#include "define.h" //端口定义
#include "delay.h" //延时程序
#define LCD_PORT PORTD
#define LCD_DDR DDRD
#define LCD_SCLK PD0
#define LCD_CS PD2
#define LCD_STD PD1
#define LCD_CS_H LCD_PORT |= BIT(LCD_CS)
#define LCD_CS_L LCD_PORT &=~ BIT(LCD_CS)
#define LCD_STD_H LCD_PORT |= BIT(LCD_STD)
#define LCD_STD_L LCD_PORT &=~ BIT(LCD_STD)
#define LCD_SCLK_H LCD_PORT |= BIT(LCD_SCLK)
#define LCD_SCLK_L LCD_PORT &=~ BIT(LCD_SCLK)
void Send_8bit(Word x);//串行发送8位数据
void Lcd_Write(Byte start,Byte data);//模块写入子程序
void Lcd_Reset(void);//模块复位子程序
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
Byte lcd_buf[5];
Word *pointer;
Byte data;
void Hzk_Dis_Data(Byte ypos,Byte xpos,Word data,Byte num)//xpos为列数,ypos为行数,num字符串长度
{
Byte i=0,ram_address;//ram_address:首地址
for(i=0;i<num;i++)
{
lcd_buf[num-i-1]= data%10+0x30;
data /= 10;
}
if(ypos==1)
{
ram_address = 0x80+xpos-1;
}
else if(ypos==2)
{
ram_address = 0x90+xpos-1;
}
Lcd_Write(0xf8,ram_address);
pointer = lcd_buf;
for(i=0;i<num;i++)
{
Lcd_Write(0xfa,*pointer);
pointer++;
}
}
void main(void)
{
Word i;
Init_Devices();
Lcd_Reset();
Hzk_Dis_Words(1,1,"袁自刚");
Hzk_Dis_Data(2,1,12345,5);
while(1)
;
}
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度
{
Byte i=0,ram_address;//ram_address:首地址
//首先判断字符串得长度
while(*(lcd_pointer+i) != '\0')//字符串长度
{
i++;
}//i=字符串长度
if(i>15)
{
i=15;
}
if(ypos==1)
{
ram_address = 0x80+xpos-1;
}
else if(ypos==2)
{
ram_address = 0x90+xpos-1;
}
Lcd_Write(0xf8,ram_address);
for(;i>0;i--)
{
Lcd_Write(0xfa,*lcd_pointer);
lcd_pointer++;
}
}
/*
void Char_Dis(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数
//0=<xpos<=8,0=<ypos<=2
{
if(ypos==1)
{
Lcd_Write(0xf8,xpos-1+0x80);
Lcd_Write(0xfa,*lcd_pointer);
Lcd_Write(0xfa,*(lcd_pointer+1));
}
else if(ypos==2)
{
Lcd_Write(0xf8,xpos-1+0x90);
Lcd_Write(0xfa,*lcd_pointer);
Lcd_Write(0xfa,*(lcd_pointer+1));
}
}
*/
void Lcd_Reset(void)
{
LCD_CS_H;//片选置高
Delay_Ms(1);//等待内部复位
Lcd_Write(0xf8,0x30);//使用基本指令集
Lcd_Write(0xf8,0x0c);//整体显示on
Lcd_Write(0xf8,0x01);//清除显示
Delay_Ms(5);//4.6ms
Lcd_Write(0xf8,0x06);//显示右移
LCD_CS_L;//片选置低
}
void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据
{
LCD_CS_H;//片选置高
Send_8bit(start);
Delay_Us(100);//72us
//将data变为datal 0000 datah 0000
Send_8bit(com&0xf0);
Delay_Us(100);//72us
Send_8bit((com&0x0f)<<4);
Delay_Us(100);//72us
LCD_CS_L;//片选置低
}
void Send_8bit(Word x)
{
Byte i;
for(i=0;i<8;i++)
{
if(x&0x80)//数据线发送数据
{
LCD_STD_H;
}
else
{
LCD_STD_L;
}
LCD_SCLK_L;//产生同步时钟
Delay_Us(2);
LCD_SCLK_H;
Delay_Us(2);
x <<= 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -