ATmega16的lcd12864显示程序及proteus仿真工程文件

发布者:创新思绪最新更新时间:2019-10-25 来源: 51hei关键字:ATmega16  cd12864显示  proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

 

#include

#include

#include"12864.h"

#include"main.h"


void port_init(void)

{

DDRC=0xFF;                 //12864数据口,置为输出

PORTC=0xFF;


en_out;   //置EN输出

rw_out;   //置rw输出

rs_out;   //置rs输出

cs1_out;//置cs1输出

cs2_out;//置cs2输出 

}


/***

******12864写命令函数

***/

void lcd_write_com(uchar com)

{

        rw_clr;                           //写操作

        delay_us(3);

        rs_clr;                          //写数据        

        PORTC=com;

        en_set;

        delay_us(3);

        en_clr;

}


/***

******12864写数据函数

***/

void lcd_write_date(uchar date)

{

        rw_clr;            //写操作

        delay_us(3);  

        rs_set;   //写数据

        PORTC=date;

        en_set;

        delay_us(3);

        en_clr;

}


/***

******12864确定位置数据函数

******页地址:x范围0-7

******列地址:y范围0-63

***/

void lcd_setxy(uchar x,uchar y)

{

        lcd_write_com(0xb8+x);

        lcd_write_com(0x40+y);

}


/***

******12864写一个字母或数字函数

******页地址:x范围0-3

******列地址:y范围0-15

***/ 

void lcd_write_ch(uchar x,uchar y,const uchar *ch)

{

        uchar i,j;

        if(y<8)                        //判断列地址,如果小于8列,显示在左屏

        {

                cs1_clr;        //        CS1=0;

            cs2_set;        //  CS2=1;

        }

        else                         //判断列地址,如果大于8列,显示在右屏

        {

        

                cs1_set;        //  CS1=1;

                cs2_clr;        //  CS2=0;

                y=y-8;

        }

        for(i=0;i<2;i++)

        {

                 lcd_setxy(x*2+i,y*8);                                  // x*2+i的意思是每个字符占用两页,一共可以显示4行(一共8页)

                                                                                              // y*8 的意思是每次写入的列都是8的整数倍

                 for(j=0;j<8;j++)

                 {

                          lcd_write_date(ch[i*8+j]) ;           //一共16个字节

                         delay_us(1);

                 }

        }

        cs1_clr;                 //    CS1=0;

        cs2_clr;                 //    CS2=0;

}


/***

******12864写一个汉字函数

******页地址:x范围0-3

******列地址:y范围0-7

***/ 

void lcd_write_hanzi(uchar x,uchar y,const uchar *dat)

{

        uchar i,j;

        if(y<4)

        {

                cs1_clr;                   //CS1=0;

                cs2_set;               //CS2=1;

        }

        else 

        {

        cs1_set;                //CS1=1;

                cs2_clr;                //CS2=0;

                y-=4;

        }


        for(i=0;i<2;i++)

        {

                lcd_setxy(x*2+i,y*16);                                  // x*2+i的意思是每个汉字占用两页,一共可以显示4行(一共8页)

                delay_us(1);                                                //每次写入都是16的倍数列

                for(j=0;j<16;j++)

                {

                        lcd_write_date(dat[i*16+j]) ;           //一共16个字节

                        delay_us(3);

                }        

        }

        cs1_clr;                        //CS1=0;

        cs2_clr;                        //CS2=0;

}


/***

******12864写一行字符函数

******页地址:x范围0-3

******列地址:y范围0-15

******字符数:0-15

***/

void lcd_write_str_hang(uchar x,uchar y,const uchar *ch,uchar n)

{

        uchar i;

        for(i=0;i        {

                lcd_write_ch(x,y,ch+16*i);        //指针相加

                y++;

                delay_us(3);        

        }

}



/***

******12864写一行汉字函数

******页地址:x范围0-3

******列地址:y范围0-7

******字符数:0-7

***/

void lcd_write_hanzi_hanzi_hang(uchar x,uchar y,const uchar *date,uchar n)

{

        uchar i;

        for(i=0;i        {

                lcd_write_hanzi(x,y,date+i*32);

                //注意理解ch+i*32:指的是数组指向下 i*32个数组

                y++;        

                delay_us(3);

        }

}


/***

******12864写一个字母或数字反白函数

******页地址:x范围0-3

******列地址:y范围0-15

***/ 

void lcd_write_ch_fb(uchar x,uchar y,const uchar *ch)

{

        uchar i,j;

        if(y<8)

        {

                cs1_clr;                   //CS1=0;

                cs2_set;                   //CS2=1;

        }

        else 

        {

                cs1_set;                   //CS1=1;

                cs2_clr;                   //CS2=0;

                y-=8;

        }

        

        for(i=0;i<2;i++)

        {

                lcd_setxy(x*2+i,y*8);                

                {

                        for(j=0;j<8;j++)

                        {

                                lcd_write_date(255-ch[i*8+j]) ;           //一共16个字节        

                                delay_us(3);

                        }

                }

        }

        cs1_clr;                                 //CS1=0;

        cs2_clr;                                //CS2=0;        

}


/***

******12864写一行字母或数字反白函数

******页地址:x范围0-3

******列地址:y范围0-15

***/ 

void lcd_write_str_fb(uchar x,uchar y,const uchar *ch,uchar n)

{

uchar i;

for(i=0;i{

  lcd_write_ch_fb(x,y,ch+i*16);

        y++;

        delay_us(3);

[1] [2]
关键字:ATmega16  cd12864显示  proteus仿真 引用地址:ATmega16的lcd12864显示程序及proteus仿真工程文件

上一篇:AVR328 PWM转PPM源程序
下一篇:AVR单片机快速PWM定时器0发生模式 TIME0_快速PWM程序

推荐阅读最新更新时间:2024-11-02 15:31

ATmega16 低频晶体振荡器
为了使用32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位CKSEL 设置为“1001”以选择低频晶体振荡器。晶体的连接方式如Figure 12 所示。通过对熔丝位CKOPT 的编程,用户可以使能XTAL1 和XTAL2 的内部电容,从而去除外部电容。内部电容的标称数 值为36 pF。 选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 6 所示。
[单片机]
<font color='red'>ATmega16</font> 低频晶体振荡器
基于ATmega16的飞机防滑刹车测试系统设计与实现
0 引言 飞机防滑刹车系统是飞机重要的机载设备,它是飞机上具有相对独立功能的子系统,对飞机的起飞和安全着陆起着重要的作用。由于飞机着陆过程持续的时间比较短,正常刹车时在1.5 s内防滑刹车系统必须做出反应,以确保飞机安全、可靠刹车。防滑刹车系统的响应速度、轮间保护、刹车率等性能的好坏直接影响到飞机及机载人员的安全。为避免防滑刹车系统某些装置发生故障而引起整个系统的瘫痪,就必须对飞机防滑刹车系统的性能进行检测。 飞机防滑刹车控制器测试系统是指在飞机起飞和检修时对防滑刹车控制器进行性能自动检测的地勤设备。通过检测可对防滑刹车控制器的性能、状态做出评估。本文设计一种基于ATmega16芯片的用于测试飞机防滑刹车控制器的自动测试系统
[单片机]
基于<font color='red'>ATmega16</font>的飞机防滑刹车测试系统设计与实现
ATmega16利用TWI模块读写24C02程序
/******************************************************** 工程名称:AT_Mega16_master 创建日期:2007.10.21 程序编写:朱海峰 联系方式:543376422(QQ) 13405100406(手机) AT24C02存储一个字节,并读回校验,正确蜂鸣器响一声,不正确响两声 AT24C02地址:0XA0 EEPROM地址:0X01 TWI工作方式:查询方式 ********************************************************/ #include iom16v.h #include macros.h #d
[单片机]
proteus仿真之DS1302+LCD1602显示试验
proteus仿真之DS1302+LCD1602显示试验 仿真效果图为: C语言源程序如下: /* 51单片机:DS1302+LCD1602 Proteus 仿真程序。 功能:LCD1602时钟与日期的显示。 仿真结果:LCD1602显示设定的时间与日期。 */ #include reg52.h /**********LCD1602接口程序**********/ #define LCD_PORT P1 //液晶LCD1602数据 sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; char data str1 = Date: ; char data str2
[单片机]
<font color='red'>proteus仿真</font>之DS1302+LCD1602<font color='red'>显示</font>试验
ATmega16开发板教程(3)——74HC595驱动数码管显示
4、数码管显示 数码管驱动电路采用2片74HC595芯片进行IO扩展,仅仅只需3Pin即可驱动需要16位引脚的数码管。74HC595是一个8位串行输入、并行输出的位移缓存器。 只有对74HC595的工作原理和时序要了解清楚,才能更好的理解和编程。 工作原理: Ø1、74HC595是串行输入,即将一个字节Byte的数据通过8次以高低电平的形式送到数据引脚DS,且高字节先入,低字节后入,类似于堆栈; Ø2、那么数据什么时候进入呢?需要SCK(SH_CP)时钟上升沿来讲8位bit数据移入到移位寄存器中; 直接编程讲解: 如图,首先假设wei变量=01101001,然后取出最高位,那么&0x80,得到0,那么执行e
[单片机]
<font color='red'>ATmega16</font>开发板教程(3)——74HC595驱动数码管<font color='red'>显示</font>
51单片机学习笔记———1.自定义延时函数点亮并控制LED的闪烁秒数以及用Proteus仿真
#include reg52.h #define LED P0 void delay();//延时一秒 void main() //按位操作点亮小灯 { unsigned int i; while(1) { for(i = 0;i 8;i++) { LED = ~(0X01 i);//之所以要取反,因为这样的十六进是制数比较小,比较直观 delay(); } } } void delay() //延时一秒 { unsigned int i,j; for(i = 0;i 83;i++) { for(j = 0;j 1000;j++) { ;
[单片机]
51单片机学习笔记———1.自定义延时函数点亮并控制LED的闪烁秒数以及用<font color='red'>Proteus仿真</font>
基于51单片机的8255 并行 I/O 扩展实验Proteus仿真
1、了解单片机地址译码。 2、了解 8255 芯片结构及编程方法。 3、了解 8255 输入、输出实验方法。 4、熟悉 proteus 环境仿真电路的调试方法。 实验流程图如下: 实验仿真图如图:
[单片机]
基于51单片机的8255 并行 I/O 扩展实验<font color='red'>Proteus仿真</font>
基于ATMega16单片机的密码锁的设计
随着科技的发展,安全问题越来越受人们关注,各种安全产品相继问世,如指纹防盗,红外防盗等,虽然这类产品的安全性较高,但其成本也同样较高,携带安装都不方便也同样限制了其发展。本文利用ATMega 16单片机,通过4×3键盘和七段数码管显示,除实现了密码锁的密码验证、重新设置和输入错误报警等基本功能外,还创新性的实现了键盘的重新定义。通过对键盘的重新定义可以有效的防止密码被盗,同时也降低了成本,便于携带安装。 一、设计目的、用途、功能 1.设计目的 随着科技的进步,安全问题越来越受人们重视,市场上也相应的出来很多产品,如指纹防盗,红外防盗等。最然其安全性能很高,但是成本也相对较高,也不方便携带和安装。本设计的目的就是为了保证高安全性的前
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved