⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plcd_bus.c

📁 电子时钟
💻 C
字号:
					/*************** 812 Bus LCD Program *************/
					
					#include "intrins.h"
					#include "math.h"
					#include "ascii.h"
					
					//--------CSA----A10------//
					//--------CSB----A11------//
					//--------R/S----A8-------//--1-data,0-command//
					//--------R/W----A9-------//--1-read,0-write//					
					//--------EN-----A15&R&W--//
					
					#define	lcd_on		0x3f
					#define lcd_off		0x3e
					#define	lcd_xrow	0xc0
					#define	lcd_page	0xb8
					#define	lcd_y		0x40	
										
					#define		left_command_add	0x40800	// left command write address//
					#define		left_data_add		0x40900	// left data write address//
					#define		left_zt_read_add	0x40a00	// left zhuangtai read address//
					#define		left_data_read_add	0x40b00	// left data read address//
					
					#define		right_command_add	0x40400	// right command write address//
					#define		right_data_add		0x40500	// right data write address//
					#define		right_zt_read_add	0x40600	// right zhuangtai read address//
					#define		right_data_read_add	0x40700	// right data read address//
					
					
					//************* Delay *********//	
				/*	void delay(int n)
					{
						int	i;
						for(i=0;i<=n;i++)
						{
							_nop_();
						}
					}
								
					/*********write left command ************/					
					void left_command(char cmd)
					{
						unsigned char flag;
						flag=FVAR(char, left_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,left_zt_read_add);
						}
						FVAR(unsigned char,left_command_add)=cmd;
					}
					
					/***********write right command ********/
					void right_command(char cmd)
					{
						char flag;
						
						flag=FVAR(unsigned char,right_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,right_zt_read_add);
						}
						FVAR(unsigned char,right_command_add)=cmd;
					}
												 
 					/***************write left data********/
 					void left_data(char lcd_data)
 					{
 						char flag;
						
						flag=FVAR(unsigned char,left_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,left_zt_read_add);
						}
						FVAR(unsigned char,left_data_add)=lcd_data;
					}
					
					/***************write right data********/
 					void right_data(char lcd_data)
 					{
 						char flag;
						
						flag=FVAR(unsigned char,right_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,right_zt_read_add);
						}
						FVAR(unsigned char,right_data_add)=lcd_data;
					}
					
					/*********read left data*********/
					unsigned char left_read()
					{
						char flag,reddd;
						
						flag=FVAR(unsigned char,left_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,left_zt_read_add);
						}
						FVAR(unsigned char,left_data_add)=0xff;
						reddd=FVAR(unsigned char,left_data_read_add);
						
						return reddd;
					}
					
					/*********read right data*********/
					unsigned char right_read()
					{
						char flag,reddd;
						
						flag=FVAR(unsigned char,right_zt_read_add);
						while((flag&0x80)==0x80)
						{
							flag=FVAR(unsigned char,right_zt_read_add);
						}
						FVAR(unsigned char,right_data_add)=0xff;
						reddd=FVAR(unsigned char,right_data_read_add);
						
						return reddd;
					}
					
						//******************* clear left lcd ***************************//
					void lcd_left_clear()
					{
						char	i;
						int	j;
						left_command(lcd_xrow);
						for(i=0;i<=7;i++)
						{
							left_command(lcd_page|i);
							left_command(lcd_y);
							for(j=0;j<=63;j++)
							{
								left_data(0x00);
							}
						}
					}
					
				//********************** clear right lcd **********************//
					void lcd_right_clear()
					{
						char	i;
						int	j;
						right_command(lcd_xrow);
						for(i=0;i<=7;i++)
						{
							right_command(lcd_page|i);
							right_command(lcd_y);
							for(j=0;j<=63;j++)
							{
								right_data(0x00);
							}
						}
					}
					
										
					//************************ display ascii at x,y *********************//
				void display_ascii(unsigned char xrow,unsigned char yrow, unsigned char *tata)
				{
					int i;
					left_command(lcd_xrow|0x00);
					right_command(lcd_xrow|0x00);
					
										
					while(*tata!='\0')
					{
						if(xrow>15)
						{
							xrow=xrow-16;
							yrow=yrow+2;
						}
						else 
					{
						if(xrow<8)
						{
							left_command(lcd_page|yrow);
							left_command(lcd_y|xrow*8);
							for(i=0;i<8;i++)
							{
								left_data(reg[(*tata-32)*16+i]);
							}
							
							left_command(lcd_page|yrow+1);
							left_command(lcd_y|xrow*8);
							for(i=8;i<16;i++)
							{
								left_data(reg[(*tata-32)*16+i]);
							}
							tata++;
							xrow=xrow+1;
						}
						else	
						{
							right_command(lcd_page|yrow);
							right_command(lcd_y|xrow*8);
							for(i=0;i<8;i++)
							{
								right_data(reg[(*tata-32)*16+i]);
							}
							
								right_command(lcd_page|yrow+1);
								right_command(lcd_y|xrow*8);
								for(i=8;i<16;i++)
							{
								right_data(reg[(*tata-32)*16+i]);
							}
							tata++;
							xrow=xrow+1;
						}
					}
					}	
				}	
				
					//******************************display 00-99 **********************************//
			void display_data(unsigned int xrow,unsigned char yrow, unsigned char dada)
			{
				unsigned int i,j;
				unsigned char a[2];
				a[0] = (dada>>4)&0x0f;
				a[1] = dada&0x0f;
				
				left_command(lcd_xrow|0x00);
				right_command(lcd_xrow|0x00);
				
				for(j=0;j<2;j++)
				{
					if(xrow>15)
					{
						xrow=xrow-16;
						yrow=yrow+2;
					}
					else 
					{
						if(xrow<8)
						{
							left_command(lcd_page|yrow);
							left_command(lcd_y|xrow*8);
							for(i=0;i<8;i++)
							{
								left_data(reg[(a[j]+16)*16+i]);
							}
							
							left_command(lcd_page|yrow+1);
							left_command(lcd_y|xrow*8);
							for(i=8;i<16;i++)
							{
								left_data(reg[(a[j]+16)*16+i]);
							}			
						}
						else	
						{
							right_command(lcd_page|yrow);
							right_command(lcd_y|xrow*8);
							for(i=0;i<8;i++)
							{
								right_data(reg[(a[j]+16)*16+i]);
							}
							
								right_command(lcd_page|yrow+1);
								right_command(lcd_y|xrow*8);
								for(i=8;i<16;i++)
							{
								right_data(reg[(a[j]+16)*16+i]);
							}
						}
					}
					xrow++;
				}	
					
			}
					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -