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

📄 62256tiao.i

📁 使用OKI公司8255A控制62256RAM程序,并使用8803液晶显示
💻 I
📖 第 1 页 / 共 2 页
字号:
{unsigned char temp=0;
 temp=daxiao;
 daxiao=daxiao<<6;
 temp|=0x0f;
 temp|=daxiao;
 Send_Com(0xf1,temp);
 Send_Com(0xf0,0xa0); //换字符表到表0
 Send_Com(0x60,y); //x,y与液晶的实际地址刚好是反的
 Send_Com(0x70,x*8);
 Post_Msg(p);
 } 
void word(unsigned char x,unsigned char y,unsigned char p)
{
 Send_Com(0xf1,0x0f);
 Send_Com(0xf0,0xa0); //换字符表到表0
 Send_Com(0x60,y); //x,y与液晶的实际地址刚好是反的
 Send_Com(0x70,x*8);
 Post_Msg(p);
 } 


//===============================================================
//---显示字符串,包括中文字符,可混合中英文即符号
//X0:列设置(0-29) Y0:行设置(0-15)
void Show_Text(unsigned char X0,unsigned char Y0,unsigned char *Text)
{  
   Send_Com(0x12,0xB1);         //进入文本图层
   Send_Com(0x60,Y0);
   Send_Com(0x70,X0*16);
   while((*Text)>0)
   {
       Post_Msg(*Text);
       Text++;
       delay_us(5);
   }
}

//===========================================================
//---显示单个数字
void Show_Num(unsigned char X0,unsigned char Y0,unsigned char Num)
{
   Send_Com(0x12,0xB1);         //进入文本图层
   Send_Com(0x60,Y0);
   Send_Com(0x70,X0*8);
   Post_Msg(Num+48);      
}
//============================================================


//============================================================
//---显示浮点数
void Show_Number(unsigned char X0,unsigned char Y0,float Num,unsigned char DpLen)
{
   unsigned char i=0,j=0,mynum[6];
   unsigned int temp;   
   bit flag=0;							//flag:是否为负  
   Send_Com(0x12,0xB1);                           //进入文本层
   Send_Com(0x60,Y0);                                //消隐
   Send_Com(0x70,X0*8); 
   for(i=0;i<6;i++)Post_Msg(0x00);
   i=0;
   Send_Com(0x60,Y0); 
   Send_Com(0x70,X0*8); 
   if(Num<0){Num=fabs(Num);Post_Msg('-');flag=1;i++;}
  //-----------得到整数部分------------------  
   temp=(unsigned int)Num; //取整
   do
   {
      mynum[j]=temp%10;
   	  temp=temp/10;											  //丢末位
	  i++;
	  j++;     												  //位累加
   }while(temp!=0);
   //---------显示整数部分--------------------
   do
   {
    Post_Msg(mynum[j-1]+48);                      //显示每位
    ;j--;
   }while(j>0);
   j=0;
   //---------处理小数部分-------------------	 
   if((flag&&i<4)||(!flag&&i<5))
   {
     i++;  			  //累加小数点位
     temp=(unsigned int)Num;		 //重新取整
     Num=Num-temp;	 //得到小数部分
     do
      {
	   Num=Num*10;
	   temp=Num;
	   mynum[j]=temp%10;	   				  
	   i++;
	   j++;
	  }while(i<6&&j<DpLen);	  //保留指定小数位
	  i=0;temp=0;
   	 do
	  {
	    temp+=mynum[i];i++;	  
	  }while(i<j);
	  i=0;
	  //-------------显示小数部分---------------
	if(DpLen)
	{
	if((DpLen<8)||(DpLen>=8&&temp!=0))
	{
	  Post_Msg('.');
	do
	  {Post_Msg(mynum[i]+48);i++;} 
	while(i<j);
	}
	}
   }
}	
//************************************


/************************************************************************
滚动x1到x2这几行的显示屏幕,行是以一个象点为单位
************************************************************************/  
void h_gundong(unsigned x1,unsigned char x2)
{Send_Com(0x03,0xf3);
 Send_Com(0x71,x1*16);
 Send_Com(0x72,x2*16);
 }
 
/************************************************************************
/向上垂直滚动整个屏幕
************************************************************************/  
void l_gundong(unsigned y1,unsigned char y2)
{Send_Com(0x03,0xf4);
 Send_Com(0x71,y1);
 Send_Com(0x72,y2);
 }
//*************************************************************************


//================
//画点
void point(unsigned char X0,unsigned char Y0,unsigned char Pos) 
{
   unsigned char Temp;
   Send_Com(0x12,0xB1+Pos);                     //选择操作图层
   Send_Com(0x00,0xC3);
   Send_Com(0x60,Y0/8);
   Send_Com(0x70,X0);
   Temp=Read_Data(Y0/8,X0,Pos);
   Temp|=0x80>>(Y0%8);
   Post_Msg(Temp);      
   Send_Com(0x00,0xCD);
}

void point_back(unsigned char X0,unsigned char Y0,unsigned char type)
{
 unsigned char temp=0;
 Send_Com(0x12,0x32);//读写数据均在第二层屏幕上面操作
 temp=Y0%8;
 temp=1<<(7-temp);
 Send_Com(0x00,0xc5);//进入图形模式
 Send_Com(0x60,Y0/8); //x,y与液晶的实际地址刚好是反的
 Send_Com(0x70,X0);
 if(type)temp|=Read_Data(Y0/8,X0,type);
 else
  {temp=~temp;
   temp&=Read_Data(Y0/8,X0,type);
   }
 Post_Msg(temp);
 Send_Com(0x12,0x31);//返回到第一层屏幕的操作
 Send_Com(0x00,0xcd);//返回到文字模式 
}
/***************************************************************************
该函数的功能是在屏幕上面打印一条直线 
x1,y1分别表示所画直线的起点坐标 ,x2,y2表示的是所画的直线的终点坐标
type表示的是所画的是空line还是实line,画空line的目的是可以擦除上次画的line

注意x2>x1,y2>y1;必须得保证这两个条件  
****************************************************************************/ 
void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{float xielv;
 float temp; 
 unsigned char i;
 xielv=((float)(x2)-(float)(x1))/((float)y2-(float)(y1));
 if(y1==y2)
 {
  if(x1<=x2)
   for(i=x1;i<=x2;i++)point_back(i,y1,2); 
  else
   for(i=x2;i<=x1;i++)point_back(i,y1,2); 
  }
 else 
  if(y1<y2)
  {
   for(i=0;i<(y2-y1);i++)
    {temp=x1+xielv*i;
     point_back(temp,y1+i,2); 
     }
   }
 else
  if(y1>y2)
  {
   xielv=-xielv;
   for(i=0;i<(y1-y2);i++)
    {temp=x1+xielv*i;
     point_back(temp,y1-i,2); 
     }
   } 
 }

void init_8803(void)
{
   DDRA.0          =1;
   DDRA.1          =1;
   DDRB.0          =1;
   DDRA.2          =1;
   DDRB.4=1;
   DDRC           =0xFF;
   reset_lcd();
   clear();
 
}
// CodeVisionAVR C Compiler
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega16






// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.





void fasong(unsigned char );
void fasong(unsigned char );
void fasong(unsigned char );
void fasong(unsigned char );
void usart(void)                 //USART初始化
{DDRD.0=1;
 DDRD.1=1; 
 
 UBRRH=0x80;
 UBRRL=0x35;//波特率9600 ;此时的晶振的频率为8MHz
 //UBRRL=0x9; 
 //UBRRH=0x00;
 //UBRRL=0x8;//波特率57600;此时的晶振的频率为8MHz    
 
 UCSRB=0x90;                     //数据位为8位 
 UCSRC=0x86;                     //10000110  :异步工作方式,1位停止位
 UCSRB|=0x10;       //准许接受数据
 
 fasong(10);
 fasong(10);
}
void fasong(unsigned char m)		 //串口发送
{//UCSRA&=0X20 
 while(!(UCSRA&0X20));           //是否发送完;
 UCSRB|=8;  
 UDR=m;
   
}  

unsigned char receive()
{while(!(UCSRA&0x80)); //等待接受完毕
 UCSRB&=0x7F;//清除 
 UCSRB|=0x10;
 return UDR;
 }/* */
 /**/
void fasong_int(int w)
{unsigned char temp=0;
 if(w<0){fasong(45);w=-w;}
 w=(unsigned int)w;
 temp=w/10000; 
 fasong(temp+48); 
 w=w%10000;
 
 
 temp=w/1000; 
 fasong(temp+48);
 w=w%1000; 


 temp=w/100; 
 fasong(temp+48); 
 w=w%100;
 
 
 temp=w/10; 
 fasong(temp+48);
 w=w%10;

 
 temp=w;
 fasong(temp+48); 
 
 //fasong(9);//发送完毕之后退格
 fasong(10);//发送完毕之后回车
 }  
void fasong_long(unsigned long w)
{unsigned char i=0;
 unsigned char a[10];
 unsigned char si=0;
 a[0]=0;
 for(i=0;i<10;i++)
 {a[i]=w%10;
  w=w/10;
  if(a[i]>0)si=i;
  }
 for(i=si;i>0;i--)fasong(a[i]+48);
  fasong(a[0]+48); 
  fasong(10);
 } 
 
   
/*
CodeVisionAVR C Compiler
Prototypes for mathematical functions

Portions (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.
Portions (C) 2000-2001 Yuri G. Salov
*/







unsigned int jh3=0; 
unsigned int jh3=0; 
unsigned int dress=0;
unsigned char temp=0;
unsigned int readadc(unsigned char channel) 
{ADMUX=channel;             
 ADMUX|= 0x40;
 ADCSRA|=0x40;  //注意选择手动转换,那么必须在每次转换完成之后再将ADSC=1 启动一下 
 while((ADCSRA&0x10)!=0x10);
 return ADCW;
}
main()
{unsigned int k=0; 
 unsigned int w=0; 
 unsigned int temp=0; 
 unsigned char i=0;
 unsigned char x=0;
 unsigned char y=0;
 unsigned char x1=0;
 unsigned char y1=0;
 unsigned long  rubbish=12; 
 float jh=1.2254;  
 xianshi(12345678,0);
 DDRA=0x00;
 PORTA=0x00;
 DDRD=0xff;
 PORTA.6=1;
 ADMUX=0x40; 
 ADCSRA=192;
 DDRA.7=1;
 PORTA.7=1;
 delay_ms(200);
 init_8803();
 #asm("sei")
 
 rest8255(0x80);
 usart(); 
 send8255(0xff,0);
 send8255(0xff,1);
 send8255(0xff,2);
 chinese(0,6,"三峡大学电子创新实验室"); 
 chinese(2,0,"童江"); 
 next:
 temp=0; 
 x=12;
 k=13;
 
 TCCR1A=0x00;
 TCCR1B=0x02;
 //jh=sin(jh);
 //jh=jh*2.35689;
 //k=k+87;
 //k=k+87;
 //k=k+87;
 //k=k+87;
 //jh=sqrt(28.5);
 //x=x*6;
 //xianshi(2345678,0); 
 //rubbish=rubbish/20;
 //x1=readadc(0);
 //x1=readadc(0);
 //xianshi(k,2);
 //chinese(2,2,8);
 k=TCNT1; 
 //k=12345;
 xianshi(k,0);
 
 /**/
 //开始接收数据
 k=0;
 while(PINA.6);
 /* {//x1=receive();
  
  //writeram(k,x1);
  if(jh3!=0)
  {xianshi(1314584,0);
   jh3=0;
   k=UDR;
   }
  //delay_ms(1000);
  k++;
   
  }
 xianshi(0xf0,0); 
 while(PINA.6); 
 xianshi(dress,0);
 delay_ms(3000); 
 k=0; 
 while(1)
 {
  y1=readram(k);
  xianshi(y1,0);
  k++;  
  delay_ms(1000); 
  }
 
 
 //接收数据完毕
 while(PINA.6); 
 xianshi(jh*1000000,6);
 delay_ms(1000);
 while(PINA.6); 
 */
 while(temp<10000)
 {k=readadc(0);//0xaabb;
  i=k;
  writeram(temp,i);
  i=k>>8;
  writeram(temp+1,i);
  temp+=2;  
 } 
 
  
 temp=0; 
 xianshi(87654321,0);
 point(0,2,1);
 //开始画图 
 
 while(temp<481)
 {k=readram(temp+1);
  k=k<<8;
  
  k=k+readram(temp);
  xianshi(k,0);
  //delay_ms(300);
  temp+=2; 
  if(k!=0)
  {x=128-k/8;
   point(x,y,1);
   xianshi(k,0);
   delay_ms(50);
  } 
  if(y==240)
  {
  while(PINA.6);
  y=0;
  }
   
  else x=128;
  temp+=2; 
  y++;
 } 
/* 
 temp=0;
 while(temp<10000)
 {k=readram(temp+1);
  k=k<<8;
  k=k+readram(temp);
  if(k!=0)
  {x=128-k/8;
   point(x,y);
   xianshi(k,0);
   delay_ms(50);
  } 
  if(y==240)
  {
  while(PINA.6);
  y=0;
  }
   
  else x=128;
  temp+=2; 
  y++;
  
 } 
 temp=0;
 while(1);
 while(temp<32000)
 {k=readram(temp);
  xianshi((long)temp*1000+k,0); 
  fasong(k);
  if(k!=0x25)
  {
   w++;
    }
  //xianshi(k,0);
  temp++; 
  delay_ms(100);
 }
 */  
 xianshi(w,0);
 w=0;
 delay_ms(100); 
 goto next; 
 while(1);
 }    
interrupt [12] RXINT() //接受数据完毕中断
{temp=UDR;
 writeram(dress,temp);
 dress++;
 } 

⌨️ 快捷键说明

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