历史上的今天
今天是:2024年10月25日(星期五)
2019年10月25日 | ATmega16的lcd12864显示程序及proteus仿真工程文件
2019-10-25 来源:51hei
#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);
史海拾趣
|
2009年12月28日是Linux创始人Linus的40岁生日。 19年前,在圣诞节后赫尔辛基商店开业的第一天“,Linus冲向电脑商店,用圣诞节和生日礼金购买了他的第一台PC:一台DX33 80386计算机,4 Megs RAM,40 Megabyte硬盘,没有协同处理器。Linus之所以选 ...… 查看全部问答> |
|
编写一个基于MFC的应用程序,读取.txt文件 文件内容的结构如下 书名1;价格1 书名2;价格2 书名3;价格3 。。。。。。 要求分别提取出书名和价格,分别放到string类型变量中 要就用VC++实现 各位高手帮帮忙,最好能有代码… 查看全部问答> |
|
问高手个问题,为什么我的程序进了不硬中断? BIOS设置: HWI_INT11属性: interrupt source: MCSP_0_Receiver function: _receiver use Dispatcher interrupt Mash: self 程序 void main() {} void receiver() {...} 用轮询方式可以收 ...… 查看全部问答> |
|
多器件TDDB和NBTI 图4示出了多器件TDDB测试结构的共用 SMU和SMU-per-pin配置。在开关(共用SMU) 情况下,SMU1提供连续应力至测试序列的全 部结构,SMU2顺序测量每个器件。在顺序分 析结构的过程中,开关延时和有限的测量速 度合在一起会限制每 ...… 查看全部问答> |
|
今天刚拿到快递~~~好欢乐~~~(不得不吐槽的是,圆通就是慢,虽然路上不慢,但是总在终点站耽误一天!!尼玛啊!!) 迫不及待插上电,试试内置的例程. led闪了会,一摸芯片,明显有点烫啊!! 后来用ccs5少了个led boosterpack的程序进去..(虽然没达到演示效果 ...… 查看全部问答> |
|
本帖最后由 slotg 于 2014-10-19 09:37 编辑 本次实验编写了一个旋转编码器的驱动,顺时钟旋转时计数器增加,逆时钟旋转时计数器减少,压下中间开关时计数器清除。 旋转编码器的接脚与输出波形: 旋转编码器是输出2个相位差90度的波形,由 ...… 查看全部问答> |




