历史上的今天
返回首页

历史上的今天

今天是:2024年10月22日(星期二)

正在发生

2019年10月22日 | ATMEGA128的1602LCD显示驱动程序

2019-10-22 来源:51hei

本实验开发板的电源选择5V。

单片机源程序:

//ATMEGA128的1602型LCD显示驱动程序

//编译环境 ICCAVR 7.16A

//系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms

//忠兴电子元件店编辑

//日期:2010.01.14


//***********************************************************************

//                        包含文件

//***********************************************************************


#include

#include

#include

#include


#define uchar unsigned char

#define uint  unsigned int


#define RS_CLR        PORTF &= ~(1 << PF1)                 //RS置低

#define RS_SET        PORTF |= (1 << PF1)                  //RS置高


#define RW_CLR        PORTF &= ~(1 << PF2)                 //RW置低

#define RW_SET        PORTF |= (1 << PF2)                  //RW置高


#define EN_CLR        PORTF &= ~(1 << PF3)                 //E置低

#define EN_SET        PORTF |= (1 << PF3)                  //E置高


#define Data_IO                PORTA                //液晶数据口

#define Data_DDR        DDRA                 //数据口方向寄存器

#define D_LE0                PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据

#define D_LE1           PORTD |= (1 << PD4)  //数码管段控制位为1,锁存器输出与端口一致

#define W_LE0                PORTD &= ~(1 << PD5) //数码管位控制位为0

#define W_LE1           PORTD |= (1 << PD5)  //数码管位控制位为1


//*************************************************************************

//                        初始化子程序

//*************************************************************************

void system_init()

{


        Data_IO = 0xFF;                                        //电平设置

        Data_DDR = 0xFF;                                        //方向输出

        PORTF = 0xFF;                       //电平设置

        DDRF = 0xFF;                        //方向输出

    PORTD=0xFF;

        DDRD=0xFF;

        D_LE1;                             //关掉数码管,以免显示乱码                  

    W_LE1;                     

    Data_IO=0xFF;                      //关数码管            

    W_LE0;

}


//***********************************************************************

//        显示屏命令写入函数

//***********************************************************************



void LCD_write_com(unsigned char com)

{       

        RS_CLR;

        RW_CLR;

        EN_SET;

        Data_IO = com;

        delay_nms(5);

        EN_CLR;

}

//***********************************************************************

//        显示屏数据写入函数

//***********************************************************************


void LCD_write_data(unsigned char data)

{

        RS_SET;

        RW_CLR;

        EN_SET;

        Data_IO = data;

        delay_nms(5);

        EN_CLR;

}

//***********************************************************************

//        显示屏清空显示

//***********************************************************************


void LCD_clear(void)

{

        LCD_write_com(0x01);

        delay_nms(5);

}

//***********************************************************************

//        显示屏字符串写入函数

//***********************************************************************


void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)

{

       

    if (y == 0)

    {

            LCD_write_com(0x80 + x);

    }

    else

    {

            LCD_write_com(0xC0 + x);

    }


    while (*s)

    {

            LCD_write_data( *s);

            s ++;

    }

}

//***********************************************************************

//        显示屏单字符写入函数

//***********************************************************************


void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)

{

       

    if (y == 0)

    {

            LCD_write_com(0x80 + x);

    }

    else

    {

            LCD_write_com(0xC0 + x);

    }


    LCD_write_data( data);  

}

//***********************************************************************

//        显示屏初始化函数

//***********************************************************************


void LCD_init(void)

{

        DDRA = 0xFF;                                        //I/O口方向设置

        DDRA |= (1 << PA5) | (1 << PA6) | (1 << PA7);

        LCD_write_com(0x38);                                //显示模式设置

        delay_nms(5);

        LCD_write_com(0x08);                                //显示关闭

        delay_nms(5);

    LCD_write_com(0x01);                                //显示清屏

        delay_nms(5);

    LCD_write_com(0x06);                                //显示光标移动设置

        delay_nms(5);

        LCD_write_com(0x0C);                                //显示开及光标设置

    delay_nms(5);

}


//*************************************************************************

//                        主程序

//*************************************************************************

void main(void)

{


        unsigned char i;

        unsigned char *p;

        system_init();                                //系统初始化,设置IO口属性

        delay_nms(100);                                //延时100ms

        LCD_init();                                   //液晶参数初始化设置


while (1)

   {

                i = 1;

                p = "zhongxingdianzi";                     //字符串输出显示




…………



推荐阅读

史海拾趣

东晶(ECEC)公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,东晶电子开始将目光投向国际市场。公司积极参与国际展会,与全球知名电子企业建立合作关系,产品出口到欧洲、北美、东南亚等多个国家和地区。同时,东晶电子还与国际知名厂商进行技术交流和合作研发,不断提升自身技术水平,以适应全球市场的竞争需求。

Ceramics公司的发展小趣事

“绿色陶瓷”公司以其环保理念为核心,致力于研发和生产环保型陶瓷电子材料。该公司采用可再生资源和低能耗生产工艺,成功降低了产品对环境的影响。同时,绿色陶瓷还积极推广循环经济模式,通过回收再利用废旧陶瓷材料,实现了资源的最大化利用。这一环保理念不仅赢得了消费者的青睐,也为公司在电子行业的可持续发展奠定了坚实基础。

E-Z-HOOK公司的发展小趣事

在1956年的一个晴朗午后,E-Z-HOOK的创始人阿尔伯特·史密斯(化名)在实验室里遇到了一个棘手的问题。他正在测试一个复杂的电子系统,但发现现有的测试工具无法满足他的需求。于是,他动手设计并制造出了第一个E-Z-HOOK测试钩,这个简单但实用的工具极大地方便了他的工作。史密斯看到了这个产品的巨大潜力,于是决定成立一家公司来专门生产这种测试钩。这就是E-Z-HOOK公司的起源。

EXCELTA公司的发展小趣事

随着公司规模的扩大,产品质量的稳定性成为制约Excelta进一步发展的瓶颈。为了解决这一问题,公司决定引入先进的质量管理体系,并投入大量资源进行培训和改造。经过不懈的努力,Excelta的产品质量得到了显著提升,客户满意度也大幅提高。这一转变不仅为公司赢得了更多的订单,还奠定了公司在行业中的领先地位。

Ferroperm公司的发展小趣事

在发展的过程中,Ferroperm公司不断进行技术创新和产品研发,推动产品的多样化发展。他们成功开发了一系列具有高性能和独特功能的电磁材料,如高性能铁氧体、NdFeB永磁体等。这些产品不仅满足了客户对电磁材料性能的高要求,还推动了相关行业的发展。同时,Ferroperm还不断拓展产品线,推出了变压器、电感器、滤波器等一系列电子产品,进一步巩固了其在电磁材料领域的领先地位。

Bergquist Company公司的发展小趣事

70年代,随着电子技术的飞速发展,导热材料行业迎来了前所未有的机遇。Bergquist Company敏锐地捕捉到了这一机遇,开始涉足导热材料领域。公司投入大量资金进行研发,成功开发出了一系列具有创新性的导热产品。这些产品不仅性能卓越,而且价格合理,深受市场欢迎。凭借这些优势,Bergquist Company逐渐在导热材料行业崭露头角,成为了行业的领军企业。

问答坊 | AI 解惑

高精密运放资料 运用

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 主要用于微弱小信号放大,尤其是做传感器的微弱信号,AD620与OP07配合,AD620可做前级放大,OP07可做二级放大  …

查看全部问答>

RFIC 设计挑战及设计流程分析

近年来,移动通信的市场需求增长迅速,当前的移动通信系统已经可以使用成熟的信号处理技术来获取更高的信息传输速率。下一代无线系统的设计难度将增大,主要体现在对多标准和可重配置性的支持。不同的通信标准在中心频率、信号带宽、信噪比和线性度 ...…

查看全部问答>

LM3S3749读写SHT11

:QLM3S3749读写SHT11的程序,串口输出读出的温湿度值,也可以移植到SHTXX系列的其他传感器。…

查看全部问答>

2812库文件错误

在编译程序过程中出现以下错误 undefined                        first referenced symbol              &nb ...…

查看全部问答>

AND元件作用是什么?

一个电路用这个元件,不知什么作用,资料也搜不到,有用过的吗? 请教了!…

查看全部问答>

8位控制器数据集成到32位APB总线上怎么处理比较合理?

请教各位大侠,我现在想集成一个8位的CAN控制器在APB总线上 CAN控制器的输入输出数据都是8位的,而APB总线的输入输出数据都是32位的。。。 那把这个控制器集成在APB总线上的时候怎么处理比较合理? 高24位补零,好像太浪费了。。。CAN的波特率比 ...…

查看全部问答>

请问wince6.0在windows7上能进行开发么

请问wince6.0在windows7上能进行开发么,我是新手用的是s3c2440…

查看全部问答>

谁有AVR自带的函数库?

谁有AVR自带的函数库,请问怎样用啊···········急······…

查看全部问答>

电压转换:不会比这更简单了

作者:Chris Cockrill  德州仪器如今,现代设计公司不仅正在努力寻找功耗更低的更小型器件,同时他们还希望为工业自动化、PC、服务器以及电信设备等应用降低成本。实现这些目标的绊脚石是:设计人员使用运行在单一电压下的处理器,其需要 ...…

查看全部问答>

全新未拆封 MSP430 开发板 MSP-EXP430G2 LaunchPad 带触摸板

本帖最后由 nwcheroes 于 2014-7-21 23:48 编辑 全新未拆封 MSP430 开发板 MSP-EXP430G2 LaunchPad 带触摸板 50不包邮,淘宝交易 http://item.taobao.com/item.htm?id=40208386645 …

查看全部问答>