#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);
上一篇:AVR328 PWM转PPM源程序
下一篇:AVR单片机快速PWM定时器0发生模式 TIME0_快速PWM程序
推荐阅读最新更新时间:2024-11-02 15:31
设计资源 培训 开发板 精华推荐
- RD-507,使用 FSQ211 电源开关进行电源应用的参考设计
- AD8319-EVAL,AD8319 评估板,1MHz 至 10GHz,45dB 对数检测器/控制器
- NCP59151DS00GEVB:1.5 A 固定 VLDO 稳压器评估板
- YuToo墨水屏时钟
- AD8350-EVAL,评估板经过精心布局和测试,以展示 AD8350 的指定高速性能
- TCR5SB22A、150mA、2.2V 输出电压 CMOS 低压降稳压器的典型应用
- 具有 5V、3.3V、2.5V、1.8V 同步四路输出的 LT3692AHUH 降压转换器的典型应用电路
- 使用 Analog Devices 的 LT6600CDF-10 的参考设计
- SGM6232降压模块
- 稚晖君出品 便携口袋显示器&充电宝