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

📄 text1.c

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#include<ziku.h>
#include<string.h>
#include<math.h>
/************************/

#define uchar unsigned char
#define uint unsigned int

/********总线以及地址线的定义************/
#define disp_on_12864 0x3f
#define disp_off_12864  0x3e
#define col_12864     0x40
#define row_12864     0xb8
#define start_line_12864   0xc0

#define lcd_bus_12864  P0
uchar x,z;
uchar y;

sbit di_12864 =P2^0;
sbit rw_12864 =P2^1;
sbit enable_12864 =P2^2;
sbit cs1_12864=P2^6;
sbit cs2_12864 =P2^7;





/************函数声明******************/
void clear_sreen_12864 ();   //清屏(即清除显存)

void delay_12864 ();         //延时1ms

void delay(void);      //延时

void init_lcd_12864 ();	  //LCD初始化

void write_command_12864 (unsigned char cmdcode);	 //写指令
            
void write_data_12864 (unsigned char dispdata);     //写数据

void rddata(void)  ;   //读数据



/**********清除显屏(清除显示内存)***********/
void  clear_screen_12864()
{
 unsigned char i,j;
 cs1_12864 =0;cs2_12864=1;    /**清除左屏**/
 for(i=0;i<8;i++)
 {
   write_command_12864 (row_12864 +i);
   write_command_12864 (col_12864 +0);  //列地址0
   for(j=0;j<64;j++)
     write_data_12864 (0x00);     //每做一次写操作,列地址加1
 }
 cs1_12864 =1;cs2_12864 =0;    /**清除右屏**/
   for(i=0;i<8;i++)
 {
   write_command_12864(row_12864 +i);
   write_command_12864(col_12864+0);  //列地址0
   for(j=0;j<64;j++)
     write_data_12864(0x00);     //每做一次写操作,列地址加1
 }
}

/***********延时1ms**************/
void delay_12864()
{ unsigned int dy=500;
  while(--dy);
}

/*************初始化LCD屏***************/
void  init_lcd_12864()
{   
clear_screen_12864(); 
cs1_12864=1;cs2_12864=0;	 //右屏
delay_12864();
write_command_12864(disp_off_12864);
write_command_12864(start_line_12864);
write_command_12864(disp_on_12864); 
cs1_12864=0;cs2_12864=1;      //左屏
delay_12864();
write_command_12864(disp_off_12864);
write_command_12864(start_line_12864);
write_command_12864(disp_on_12864);  
}

/*******写指令到LCD*********/
void write_command_12864 (unsigned char cmdcode)
{
//lcd_busy();
di_12864 =0;
rw_12864 =0;
lcd_bus_12864 =cmdcode;      //输入控制命令(display on/off,display startline,row,col)
enable_12864 =1;
_nop_();
enable_12864 =0;
}

/***********写显示的数据到LCD***********/
void write_data_12864 (unsigned char dispdata)
{
//lcd_busy();
di_12864 =1;
rw_12864 =0;
lcd_bus_12864 =dispdata;
enable_12864 =1;
_nop_();
enable_12864 =0;
}

/*****位置 X 表示行, Y表示列 , Z 表示要亮的点 *********/
void write(x,y,uchar c)
{

 z=c;
 cs1_12864=0;
 cs2_12864=1;   //选择左屏幕
 if (y>64)
 {
 y=y-64	;
 cs1_12864=1;
 cs2_12864=0;   //选择右屏幕
 }
   write_command_12864(row_12864+x-1);	  //8大行位置 X 1到 8
   write_command_12864(col_12864+y-1);	  //128 列位置 y 1 到 128
   write_data_12864(z);
 
}

uchar getkey()

{
    unsigned char keycode=0xff,temp,i;
    P1=0x0f;
    temp=P1&0x0f;
    if(temp!=0x0f)        //判是否有键按下
    {
 //       beep=0;
        P1=0xef;          //自第0行开始扫描输出,自列读入键值
        for(i=0;i<4;i++)
        {
            temp=P1&0x0f;
            if(temp==0x07)     //判断第0列是否有键按下
            {    
                keycode=i*4+0;
                break;
            }
            else if(temp==0x0b)//判断第1列是否有键按下
            {
                keycode=i*4+1;
                break;                                  						  
            }
            else if(temp==0x0d)//判断第2列是否有键按下
            {
                keycode=i*4+2;
                break;
            }
            else if(temp==0x0e)//判断第3列是否有键按下
            {
                keycode=i*4+3;
                break;
            }
            P1=(P1<<1)|0x1;
        }

         while((P1&0x0f)!=0x0f)   //等待释放
         {
             P2=0x0f;
         }
//      beep=1;                                             
        
     }
     return keycode;
}




void rewrite(uchar c)
{


  write(x,y,c);
  y++;
  if (y==129)  {y=1;x++;}
  if (x==9)    { x=1;y=1;}

}



/******  显示 dl*16(dl是宽,高度为16)的字  l是宽  h是行   dl字长********/
void xianshi(uchar s[],uchar l, uchar h)
{
uchar i,j,k;


      k=y;

 	  for(j=0;j<=h-1;j++)

	  {
      for(i=0;i<=l-1;i++)
	  {
	  rewrite(s[i+(i/16)*16+j*16]);
      }
	  x++;
	  if(y==1)x--;
	  y=k;
      }
}


void caidan(uchar a)
{
  uchar i,j,k;
  for (i=0;i<=2;i++)
  {
  x=i*2+1;y=1;
  
  
  
  if (i==a-1)  
  { 
      for(j=0;j<=1;j++)

	  {
      for(k=0;k<=111;k++)
	  {
	  rewrite(0xff-c[a-1][k+(k/16)*16+j*16]);
      }
	  x++;
	  if(y==1)x--;
	  y=1;
      }
   }
   
   else

   xianshi(c[i],112,2);

  }



}


main()
{
   float ss,q;
   int p;
   uchar k=0,key,s=1;
   uint i,j; 
      init_lcd_12864();
  clear_screen_12864();	
 cs1_12864=0;
 cs2_12864=1;   //选择左屏幕
  


	 x=1;
	 y=6;
	  for(j=0;j<=1;j++)

	  {
      for(i=0;i<=118;i++)
	  {
	  rewrite(zx[i+(i/17)*17+j*17]);
      }
	    x=2;
	    y=6;
      }
	 
x=7;y=1;
xianshi(nj,127,2);

//if (state==1)
while(1)
{
    key=getkey();
	x=1;y=1;
	while (key==15)
	{

	
    clear_screen_12864();
    x=1;y=1;
    caidan(1);
	key=18;
	while(1)
	{
		key=getkey();


		if (key==3) 
		{
		s=s-1;
		if(s==0)
		s=3;
		caidan(s);
		
		}


		if (key==11) 
		{
		s=s+1;
		if(s==4)
		s=1;
		caidan(s);
		
		}
	    
		
		if(key==15  && s==1)
		{   
		
		   clear_screen_12864();

           
		   
		   
		   
/*******************************画坐标轴 128*64 是 X坐标33行 Y坐标63列***********************************************/
		    x=5;y=1;
			 for (i=0;i<127;i++)
              	{
            	 rewrite(1 );
               	} 
			x=4;y=125;
			rewrite(0x20);
			rewrite(0x40) ;
			rewrite(0x80)  ;
			x=5;y=125;
			rewrite(0x04) ;
			rewrite(0x02);
			rewrite(0x01);
			x=1;y=60;
			rewrite(0x04) ;
			rewrite(0x02);
			rewrite(0x01);
			y++;
			rewrite(0x01) ;
			rewrite(0x02);
			rewrite(0x04);
			for (i=0;i<8;i++)
			{y=63;
			 rewrite(0xff);
			 x++;
			}
 	        // while(1)
		
		
		/********** 正弦函数**************/
	      {
		   for(q=0;q<2*3.1416;q=q+0.05)
		   {
		   ss=(sin(q)+1)*32;
		   
		   p=ss; 
		   x=(p/8)+1;
		   
    	   rewrite(pow(2,p%8));
		 /*
		   for(i=1;i<9;i++)
		   {
		  write(x-1,y+i,0x00)	;
		   write(x,y+i,0x00)	;
		   write(x+1,y+i,0x00)	;
		   }
		 */
		   if(y==1)x--;

           	} 
		   	
		   	
		   }
	     
		 
		  }

		 }

	
 	}




 }



 	 
}




⌨️ 快捷键说明

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