TA的每日心情 | 怒 2016-3-28 21:00 |
---|
签到天数: 117 天 连续签到: 1 天 [LV.6]常住居民II
|
本帖最后由 w_shuai 于 2013-10-16 20:58 编辑
#include "12864.h"
#include <asf.h>
#include "math.h"
/*************************************************
文件名称:main.c
功能描述:系统上电后,12864液晶显示
编写人:wangshuai
创建日期:2013-8-07
**************************************************/
/************宏定义***********************************************/
#define SID IOPORT_CREATE_PIN(PORTE, 2) //RW
#define SCLK IOPORT_CREATE_PIN(PORTE, 3) //E
uchar dis0[]={"角度: "};
uchar dis1[]={"t1: "};
uchar dis2[]={"t2: "};
int abs(int temp)
{
return temp > 0 ? temp:-temp ;
}
/**************************************************************************************
函数名称: void lcd_wbyte(uchar i_data)
函数功能: 底层向lcd写1个字节
入口参数: 传送的数据
出口参数: 无
返回值: 无
其他:
**************************************************************************************/
void lcd_wbyte(uchar i_data)
{
uchar i;
for(i=0;i<8;i++)
{
if(i_data&0x80)
//gpio_configure_pin(SID, 1);
ioport_set_pin_level(SID,1);
else
// gpio_configure_pin(SID, 0);
ioport_set_pin_level(SID,0);
// gpio_configure_pin(SCLK, 0);
ioport_set_pin_level(SCLK,0);
delay_us(1);
// gpio_configure_pin(SCLK, 1);
ioport_set_pin_level(SCLK,1);
i_data<<=1;
}
delay_us(5);
}
/**************************************************************************************
函数名称: void lcd_data(uchar data,uchar cmd)
函数功能: 向lcd写命令或数据 cmd=0时写命令 cmd=1时写数据
入口参数: 命令数据
出口参数: 无
返回值: 无
其他:
**************************************************************************************/
void lcd_data(uchar data,uchar cmd)
{
uchar i_data;
if(cmd==0)
i_data=0xf8;
else
i_data=0xfa;
// gpio_configure_pin(SCLK, 0);
ioport_set_pin_level(SCLK,0);
lcd_wbyte(i_data);
i_data=data;
i_data&=0xf0;
lcd_wbyte(i_data);
i_data=data;
i_data<<=4;
i_data&=0xf0;
lcd_wbyte(i_data);
}
/**************************************************************************************
函数名称: void lcd_init()
函数功能: lcd初始化
入口参数: 无
出口参数: 无
返回值: 无
其他:
**************************************************************************************/
void lcd_init(void)
{
lcd_data(0x30,0); //基本功能设置
delay_ms(4);
lcd_data(0x02,0); //清DDRM
delay_ms(4);
lcd_data(0x0c,0); //开显示,不显示光标
delay_ms(4);
lcd_data(0x01,0); //清屏
delay_ms(4);
}
/**************************************************************************************
函数名称: void lcd_pos(uchar x,uchar y)
函数功能: lcd显示位置
入口参数: x,y
出口参数: 无
返回值: 无
其他:
**************************************************************************************/
void lcd_pos(uchar x,uchar y)
{
switch(x)
{
case 0:
lcd_data(0x80+y,0); break;
case 1:
lcd_data(0x90+y,0); break;
case 2:
lcd_data(0x88+y,0); break;
case 3:
lcd_data(0x98+y,0); break;
}
}
/*************************************************************************************
函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar string)
函数功能: 写入一个字符
入口参数: x,y,string
出口参数: 无
返回值: 无
其他:
*************************************************************************************/
void Lcd_DisplayOneChar(uchar x,uchar y,uchar string)
{
lcd_pos( x, y);
lcd_data(string,1);
}
/*************************************************************************************
函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar *string)
函数功能: 写入一个字符串
入口参数: x,y,*string
出口参数: 无
返回值: 无
其他:
*************************************************************************************/
void Lcd_DisplayString(uchar x,uchar y,uchar *string)
{
uchar i;
lcd_pos( x, y);
for(i=0;string!='\0';i++)
lcd_data(string,1);
}
/*************************************************************************************
函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar num)
函数功能: 显示四位数值(占空比或者转速)
入口参数: x行,y列,num占空比或者转速
出口参数: 无
返回值: 无
其他:
*************************************************************************************/
void Lcd_DisplayNUM_float(uchar x,uchar y,long int num)
{
uchar wan,qian,bai,shi,ge;
wan=num/10000;
qian=num%10000/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;
lcd_pos(x,y);
lcd_data(wan+0x30,1);
lcd_data(qian+0x30,1);
lcd_data(bai+0x30,1);
lcd_data(0x2e,1);
lcd_data(shi+0x30,1);
lcd_data(ge+0x30,1);
}
/*************************************************************************************
函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar num)
函数功能: 显示三位数值(占空比或者转速)
入口参数: x行,y列,num占空比或者转速
出口参数: 无
返回值: 无
其他:
*************************************************************************************/
void Lcd_DisplayNUM(uchar x,uchar y,uchar num)
{
uchar bai,shi,ge;
bai=num/100;
shi=num%100/10;
ge=num%10;
lcd_pos(x,y);
lcd_data(bai+0x30,1);
lcd_data(shi+0x30,1);
lcd_data(ge+0x30,1);
}
/*************************************************************************************
函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar num)
函数功能: 显示三位数值(占空比或者转速)
入口参数: x行,y列,num占空比或者转速
出口参数: 无
返回值: 无
其他:
*************************************************************************************/
void Lcd_DisplayintNUMy(uchar x,uchar y,int num)
{
uchar shi,ge,num1;
num1=(uchar)(abs(num)/4);
shi=num1/10;
ge=num1%10;
lcd_pos(x,y);
if(num>=0)
lcd_data('+',1);
else
lcd_data('-',1);
lcd_data(shi+0x30,1);
lcd_data(ge+0x30,1);
}
void Lcd_DisplayintNUMy3(uchar x,uchar y,int num)
{
uchar bai,shi,ge,num1;
num1=(uchar)(abs(num));
bai=num1/100;
shi=num1%100/10;
ge=num1%10;
lcd_pos(x,y);
if(num>=0)
lcd_data('+',1);
else
lcd_data('-',1);
lcd_data(bai+0x30,1);
lcd_data(shi+0x30,1);
lcd_data(ge+0x30,1);
}
/**************************************************************************************
函数名称: void lcd_clear(void)
函数功能: 将LCD中RAM清空,屏幕显示为空
入口参数: 无
出口参数: 无
返回值: 无
其他:
**************************************************************************************/
void lcd_clear(void)
{
uchar x,y;
for(x=0;x<4;x++)
{
for(y=0;y<8;y++)
{
lcd_pos(x,y);
lcd_data(0,0);
}
}
}
/*****************************************************************************/
void xianshi(void)
{
ioport_set_pin_dir(SID, IOPORT_DIR_OUTPUT);
ioport_set_pin_dir(SID, IOPORT_DIR_OUTPUT);
lcd_init();
delay_ms(15);
Lcd_DisplayString(0,0,&dis0[0]);
Lcd_DisplayString(1,0,&dis1[0]);
Lcd_DisplayString(2,0,&dis2[0]);
}
主函数
#include <asf.h>
#include "12864.h"
int main (void)
{
board_init();
sysclk_init();
//gpio_toggle_pin(LED0_GPIO);
xianshi();
delay_ms(500);
gpio_configure_pin(LED0_GPIO, 1);
delay_ms(100);
while (1)
{
}
// Insert application code here, after the board has been initialized.
}
|
|