首页 写控制信号

写控制信号

举报
开通vip

写控制信号写控制信号 #include #include #include #include "hzk16x16.h" #define uchar unsigned char #define uint unsigned int LCD_BUS P1 #define sbit WR1 = P3^3; //写控制信号 sbit RD1 = P3^4; //读控制信号 sbit CD1 = P3^5; //通道信号, cd=1指令 cd=0 数据 void delay(uchar t); //延时 vo...

写控制信号
写控制信号 #include #include #include #include "hzk16x16.h" #define uchar unsigned char #define uint unsigned int LCD_BUS P1 #define sbit WR1 = P3^3; //写控制信号 sbit RD1 = P3^4; //读控制信号 sbit CD1 = P3^5; //通道信号, cd=1指令 cd=0 数据 void delay(uchar t); //延时 void wr_com ( uchar wr_com ); //写命令 void wr_data( uchar wr_data); //写数据 ReadSdate() ; void delay(uchar t) ; void RWcheck(); void WriteData(uchar dat); void AutoRcheck(void); void AutoWcheck(void); void AutoWriteData( uchar dat) ; void ClearScreen(unsigned int ram) ; void draw_dot(uchar x,uchar y,uchar mode); void WriteCmd1(unsigned char cmd); void WriteCmd2(unsigned char dat,unsigned char cmd); void WriteCmd3(unsigned char dat1,unsigned char dat2,unsigned char cmd); void CursorPosSet(unsigned char x,unsigned char y) ; unsigned char Cursor_X,Cursor_Y; //光标的坐标 /************************************************************ 指令代码定义 ************************************************************/ #define CursorPointer 0x21 // 光标地址设置 #define OffsetReg 0x22 // CGRAM偏移地址设置 #define AddrSet 0x24 // 显示地址设置 #define TextHomeAddr 0x40 // 文本首地址 #define TextArea 0x41 // 文本宽度设置 #define GraHomeAddr 0x42 // 图形首地址设置 #define GraArea 0x43 // 图形宽度设置 #define OrMode 0x80 // 或模式显示 #define ExorMode 0x81 // 异或模式显示 #define AndMode 0x83 // 与模式显示 #define TextAttMode 0x84 // 文本属性模式 #define InterCGROM 0 // 内部CGROM #define ExCGRAM 0x08 // 外部CGRAM #define DisplayOff 0x90 // 显示关闭 #define CursorOn 0x92 // 光标显示,但不闪烁 #define CursorBlink 0x93 // 光标闪烁 #define TextOn 0x94 // 文本模式打开 #define GraOn 0x98 // 图形模式打开 #define TGAllOn 0x9c // 文本图形模式都打开 #define DataAutoWrite 0xb0 // 数据自动写 #define DataAutoRead 0xb1 // 数据自动读 #define ExitAutoRW 0xb2 // 退出数据自动读写模式 #define DataWAddrI 0xc0 // 数据写,地址加1 #define DataWAddrD 0xc2 // 数据写,地址减1 #define DataWAddrNV 0xc4 // 数据写,地址不变 #define DataRAddrI 0xc1 // 数据读,地址加1 DataRAddrD 0xc3 // 数据读,地址减1 #define #define DataRAddrNV 0xc5 // 数据读,地址不变 #define ScreenPeek 0xe0 // 屏读 ScreenCopy 0xe1 // 屏拷贝 #define #define LineChar 32 // 设置宽度 /******************************************************************** ************ 函数名: ReadSdate(void) 函数功能: IOPORT输出数据并检查LCD忙数据。 返回数据:checkbusy /******************************************************************** ************/ ReadSdate() { uchar checkbusy; LCD_BUS = 0xff; //初始化端口 CD1=1; //读取指令 RD1=0; //允许读取 checkbusy=LCD_BUS; RD1=1; //禁止读取 return ( checkbusy ); } /******************************************************************** ************ 函数名: Void RWcheck() 函数功能: 判断状态位STA1,STA0子程序(读写指令和读写数据状态),在写指令的读(??),写数据之前这两个标志位必须同时为1 /********************************************************************************/ void RWcheck(void) { uchar databusy; do{ databusy=ReadSdate();} while( !(databusy&0x03) ); } /******************************************************************************** 函数名: Void AutoRcheck() 函数功能: 判断状态位STA2的子程序(数据自动读状态),该位在数据自动读 操作过程中取代STA0和STA1有效。在连续读过程中每读一次之前都要确认 STA2=1 ********************************************************************************/ void AutoRcheck(void) { uchar databusy; do{databusy=ReadSdate(); } while( !(databusy&0x04) ); } /******************************************************************************** 函数名: Void AutoWcheck() 函数功能: 判断状态位STA3子程序(数据自动写状态) ********************************************************************************/ void AutoWcheck(void) { uchar databusy; do{databusy=ReadSdate(); } while( !(databusy&0x08) ); } /******************************************************************************** 函数名: Void WriteCmd1(uchar cmd) Void WriteCmd2(uchar dat1,uchar cmd) Void WriteCmd3(uchar dat1,uchar dat2,uchar cmd) Void WriteData(uchar dat) 函数功能: 写指令和写数据子程序 ********************************************************************************/ void WriteData(uchar dat) { RWcheck(); CD1=0; //CD1写数据时为0,写指令时为1 LCD_BUS=dat; WR1=0; WR1=1; } void WriteCmd1(unsigned char cmd) { RWcheck(); CD1=1; LCD_BUS=cmd; WR1=0; WR1=1; } void WriteCmd2(uchar dat,uchar cmd) { WriteData(dat); WriteCmd1(cmd); } void WriteCmd3(uchar dat1,uchar dat2,uchar cmd) { WriteData(dat1); WriteData(dat2); WriteCmd1(cmd); } void AutoWriteData( uchar dat) { AutoWcheck(); CD1 = 0; LCD_BUS= dat; WR1=0; WR1=1; } /******************************************************************** ************ 函数名: void lcd_init (void) 函数功能:LCD初始化设置 ********************************************************************* ***********/ void lcd_init (void) { WriteCmd3(0x00,0x00,0x40); //文本首地址 WriteCmd3(0x20,0x00,0x41); //文本宽度设置 WriteCmd3(0x00,0x00,0x42); // 图形首地址 WriteCmd3(0x20,0x00,0x43); //设置图形宽度 //即一行显示所占字节数 WriteCmd1(0xa1); //光标设置 WriteCmd1(0x81); //显示方式设置 逻辑“或”合成 WriteCmd1(0x9f); //显示开关 Cursor_X=0x08; Cursor_Y=0x4f; CursorPosSet(Cursor_X,Cursor_Y); ClearScreen(0x2000); } /******************************************************************** ************ 函数名: Void ClearScreen(unsigned int ram) 函数功能: 清除整个屏幕 ram : 需要清零的单元数 ********************************************************************* ***********/ void ClearScreen(uint ram) { unsigned int i; // 清显示 RAM 区 0000h--2000h (8k) WriteCmd3(0x00,0x00,0x24); // 设置指针地址0000H WriteCmd1(0xb0); // 设置自动写状态 for(i=0x00;i0) Cursor_Y-=1; WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); } /******************************************************************************** 函数名: Void CursorDown() 函数功能: 光标向下移动一格 ********************************************************************************/ void CursorDown() { if(Cursor_Y<8) Cursor_Y+=1; WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); } /******************************************************************************** 函数名: Void CursorRight() 函数功能: 光标向右移动一格 ********************************************************************************/ void CursorRight() { if(Cursor_X<20) Cursor_X+=1; WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); } /******************************************************************** ************ 函数名: Void CursorLeft() 函数功能: 光标向左移动一格 ********************************************************************* ***********/ void CursorLeft() { if(Cursor_X>0) Cursor_X-=1; WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); } /******************************************************************** ************ 函数名: Void CursorEnter() 函数功能: 光标换行 ********************************************************************* ***********/ void CursorEnter() { Cursor_X=0; Cursor_Y+=1; WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); } /******************************************************************** ************ 函数原型: void delay(uchar t) 功 能; (1)延时 T*10 (2) 1MS*k 入口参数: (1) uchar t (2)uint k 出口参数: ********************************************************************* ***********/ void delay(uchar t) { uchar i,j; for(i=0;i>8), AddrSet); temp1=HZK16x16[hzcode][i*2+*temp]; WriteCmd2(temp1, DataWAddrI); // 左半部 地址加一 temp2=HZK16x16[hzcode][i*2+1+*temp]; WriteCmd2(temp2, DataWAddrNV); // 右半部 显示地址 不变 StartAddr=StartAddr + LineChar; // 换到下一行 } } //*********************************************************** // 主函数 //*********************************************************** main() { uchar x; uchar m; lcd_init(); for(x=0;x<240;x++) { draw_dot(2*x,94,1); draw_dot(2*x,47,1); draw_dot(2*x,0,1); } for(m=0;m<128;m++) { draw_dot(0,m*2,1); draw_dot(239,m*2,1); draw_dot(120,m*2,1); } ShowHZ16x16(0,6, 0x0b); ShowHZ16x16(2,6, 0x0c); ShowHZ16x16(0,7,0x0d); ShowHZ16x16(2,7,0x0e); ShowHZ16x16(5,6, 0x0f); ShowHZ16x16(7,6, 0x10); ShowHZ16x16(5,7,0x11); ShowHZ16x16(7,7,0x12); while(1); }
本文档为【写控制信号】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:38KB
软件:Word
页数:16
分类:
上传时间:2017-11-13
浏览量:25