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

📄 1.c

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_bus P0
#define key_bus P1
//tlc_5602
sbit sdata=P2^2;
sbit sclk=P2^1;
sbit load=P2^0;
//lcd
/*sbit rs=P2^5;       
sbit rw=P2^6;
sbit e=P2^7;
uchar offset=0x80;
//uchar code tab[16]={0x41,0x42,0x43,0x44,0x33,0x36,0x39,0x23,0x32,0x35,0x38,0x30,0x31,0x34,0x37,0x2a};
//uchar code tab1[16]={'*','0','#','D','7','8','9','C','4','5','6','B','1','2','3','A'};
//uchar code tab2[16]={3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12};
uchar code table1[128] = { 
                         64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121, 

                         123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118, 

                         117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48, 

                         45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6, 

                          7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60}; 
uchar code table[15]={0,0x30,0,0x2e,0x37,0x38,0x39,0,0x34,0x35,0x36,0,0x31,0x32,0x33};   
uchar code num[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};                   	                                
uchar code str1[]="boxingfashengqi";
uchar code str2[]="yunxingzhong";
uchar code str3[]="yunxingzhong:";
uchar code str4[]="A: fangbo";  //电压
uchar code str5[]="B: sanjiaobo"; //温度
uchar code str6[]="C: zhengxianbo";    //标定
uchar code str7[]="D: help";
uchar code str8[]="qingjiance";

uchar code he[]="*:OK #:UP(clear)";*/

/*uchar state=0;
void delay(uchar dy)
{
  while(--dy);
} */
/*void delay2(uint t)
{
    uint i;
    while(t--)
    {
        /* 对于11.0592M时钟,约延时1ms */
      //  for (i=0;i<125;i++)
      //  {}
    //}
//} 




dac_tlc5620(uchar send_char)
{
        uchar i;
        load=1;
        sclk=1;sdata=0;sclk=0;  //
        sclk=1;sdata=0;sclk=0;  // SDATA选择通道
        sclk=1;sdata=1;sclk=0; // SDATA 控制RNG 为1 加倍

        for(i=0;i<8;i++)
    	{
                sclk=1;
                if(send_char&0x80) sdata=1;
                else sdata=0;
            	sclk=0;
                send_char=send_char<<1;
    	}
        load=0;
        load=1;

}





/**********判断忙标志,返回的是一个位BF**********/
/*bit lcd_busy(void)
{
        uchar bflag;     
        rs=0;
        rw=1;
        _nop_();
        e=1;
        _nop_();
        lcd_bus=0xff;
        bflag=lcd_bus;
        e=0;
        return(bit)(bflag&0x80);    //BF=1 busy   
}*/



/*********写命令,有两个参数,第一个是要写的命令控制字,
第二个是用来控制是否进行忙标志的判断。
busyflag=1:判断;为 0:不判断****************/
/*void lcd_wrcmd(uchar cmd)
{
        while(lcd_busy());
        lcd_bus=cmd;
        rs=0;
        rw=0;
        _nop_();
        e=1;
        _nop_();
        _nop_();
        e=0; 
}*/


/************向液晶片写数据***************/
/*void lcd_wrdata( uchar lcddata)
{
        while(lcd_busy());
        lcd_bus=lcddata;
        rs=1;
        rw=0;
        _nop_();
        e=1;
        _nop_();
        _nop_();
        e=0;
}*/

/****************初始化***************/
/*void lcd_ini(void)
{
        lcd_wrcmd(0x38); 
        delay(100);
        lcd_wrcmd(0x0c);
        delay(100);
        lcd_wrcmd(0x06);
        delay(100);
        lcd_wrcmd(0x01);
        delay(100);
}*/



/*****************读按键***************/
/*uchar getkey()
{
    uchar keycode=0xff,temp,i;
    key_bus=0x0f;
    temp=key_bus&0x0f; 
    if(temp!=0x0f)              //有键按下
    {
       // beep=0;
        key_bus=0x7f;
        for(i=0;i<4;i++)
    	{
            temp=key_bus&0x0f;
            if(temp==0x07)
            {    
                keycode=i*4;
            	break;
    		}
            else if(temp==0x0b)
    		{
                keycode=i*4+1;
            	break;
    		}
            else if(temp==0x0d)
    		{
                keycode=i*4+2;
            	break;
    		}
            else if(temp==0x0e)
    		{
                keycode=i*4+3;
            	break;
    		}
            key_bus=(key_bus>>1)|0x80;
     	}

         while((key_bus&0x0f)!=0x0f)   //等待释放
    	   {
             key_bus=0x0f; 
    	   }
    //   beep=1;                    			             
        
     }
     return keycode;
	//return tab2[keycode];
}       


welcome()
{
       
       uchar temp,i;
       lcd_wrcmd(0x0c);
       lcd_wrcmd(0x80); 
          
       for(i=0;i<15;i++)
            lcd_wrdata(str1[i]);
     //  lcd_h();
       lcd_wrcmd(0xc1);
      lcd_wrdata('L'); lcd_wrdata('I');lcd_wrdata('G');lcd_wrdata('A');lcd_wrdata('O');lcd_wrdata('Y');lcd_wrdata('A');
     //  lcd_wrdata(0);
       //lcd_wrdata('0');lcd_wrdata('7');
      // lcd_wrdata(1);
       while(1)
       {                                        	               
           temp=getkey();
           if(temp!=0xff)    //按任意键跳转
           {
               state=1;  
              // lcd_wrcmd(1);
               break;
           }
       }
}
   
/*
fangbo(uchar height,uchar time1,time2)
{       
          uchar i,k;

     /*   uchar i,k;  // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值        
       lcd_wrcmd(0x80);  //会出现光标乱跳的错误
       for(i=0;i<15;i++)lcd_wrdata(str2[i]);
       lcd_wrcmd(0xc0);
	   for(i=0;i<10;i++)lcd_wrdata(str8[i]);
       while(1)                  //按键处理
       { 
           i=getkey();
           if(i==2)
           {  
		     state=1;
			 break;
            }
            else 
            {
        while(1)
            {  for(k=0;k<time1;i++)    
	            {
	               dac_tlc5620(height);
	                 delay2(1);
	            }    
             for(k=0;k<time2;i++)
	            {	     
                dac_tlc5620(0);
                     delay2(1);
	            }       
      //      }
            }                           
}*/

sanjiao()
{
	uchar i;
	while(1)
	
	 {for(i=0;i<255;i++)
		dac_tlc5620(i);

	 for(i=255;i>0;i--)
		dac_tlc5620(i);
	 }
}


      	



/* sanjiaobo(uchar height,uchar time)
{
    uchar i,ii,j;
    lcd_wrcmd(1);
    lcd_wrcmd(0x0c);
    lcd_wrcmd(0x80);
    for(i=0;i<15;i++) lcd_wrdata(str2[i]);
    lcd_wrcmd(0xc0);
	for(i=0;i<12;i++) lcd_wrdata(str8[i]);
    while(1)
    {
        ii=getkey();
        if(ii==2)
        {
           state=1;
		   break;
         }
        else
		{   for(i=0;i<height;i++)
		     { for(j=0;j<time/2;j++)
                dac_tlc5620(height);
             }
		    for(i=height;i>0;i--)
	         { for(j=0;j<time/2;j++)
                dac_tlc5620(height);
             }
        }
   }

}
zhengxianbo(void)
{     
       uchar i;  // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值        
       lcd_wrcmd(0x80);  //会出现光标乱跳的错误
       lcd_wrcmd(0x81);
       for(i=0;i<12;i++)lcd_wrdata(str2[i]);
       lcd_wrcmd(0x0c);
       lcd_wrcmd(0xc0);lcd_wrdata(str8[i]);
       while(1)                  //按键处理
       { 
           i=getkey();
           
            if(i==2)
               {
                 state=1;               
            	  break;
               }
            else 
    		   {
               for(i=0;i<128;i++)
               dac_tlc5620(table1[i]); //table1[i]=64+sin[(2π/128)*i]
			   delay(200);
               }
       }
 }

////////////////////////////////////////////////////////////////////////////////////
menu()
{
     uchar i,ii,cnt=1;

     lcd_wrcmd(0x83);
     for(i=0;i<10;i++)
         lcd_wrdata(str4[i]);
     lcd_wrcmd(0xc3);
     i=0;
     while(str5[i]!='\0')
     {
        lcd_wrdata(str5[i]);
        i++;
     }
     lcd_wrcmd(0x80);
     lcd_wrdata('-');
     lcd_wrdata('>');


     while(1)
     {
         ii=getkey();
       ///////////////////////////翻屏///////////////////////////////
         if(ii==2)        
         {   cnt++;
             if(cnt==5) cnt=1;
             if(cnt==1)
        	 {
                 //////////////////////
                 // ->1: FREQENCY
                 //	  2: PHASE
                 /////////////////////
                 lcd_wrcmd(1);//clear
                 lcd_wrcmd(0x83);        //frequency
                 for(i=0;i<10;i++)
                     lcd_wrdata(str4[i]);

                 lcd_wrcmd(0xc3);       //phase
                 i=0;
                  while(str5[i]!='\0')
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0x80);
                  lcd_wrdata('-');
                  lcd_wrdata('>');      	     
        	 }

             else if(cnt==2)
        	 {
                 //////////////////////
                 //     1: FREQENCY
                 //   ->2: PHASE
                 /////////////////////
                 lcd_wrcmd(1);//clear

                 lcd_wrcmd(0x83);        //frequency
                 for(i=0;i<10;i++)
                     lcd_wrdata(str4[i]);

                 lcd_wrcmd(0xc3);       //phase
                 i=0;
                  while(str5[i]!='\0')
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0xc0);
                  lcd_wrdata('-');
                  lcd_wrdata('>');
        	 }
             else if(cnt==3)
        	 { 

                 //////////////////////
                 //     2: PHASE
                 //  -> 3: Amplitude 
                 /////////////////////
                 lcd_wrcmd(1);

                 lcd_wrcmd(0xc3);           //Amplitude 
                 for(i=0;i<8;i++)
                     lcd_wrdata(str6[i]);        

                  lcd_wrcmd(0x83);
                  i=0;
                  while(str5[i]!='\0')      //phase
                  {
                       lcd_wrdata(str5[i]);
                       i++;
                  }
                  lcd_wrcmd(0xc0);
                  lcd_wrdata('-');
                  lcd_wrdata('>');
        	 }
             else if(cnt==4)
        	 {

                 //////////////////////
                 //     3: Amplitude 
                 //	 -> 4: HELP
                 /////////////////////
                 lcd_wrcmd(1);
                 lcd_wrcmd(0x83);           //setting
                 for(i=0;i<8;i++)
                     lcd_wrdata(str6[i]);        
                 lcd_wrcmd(0xc3);
                 for(i=0;i<7;i++)
                     lcd_wrdata(str7[i]);   //help				
                 lcd_wrcmd(0xc0);
                 lcd_wrdata('-');
                 lcd_wrdata('>'); 
        	 }
    		 
            		 		    
    	 }
/////////////////////////OK进入///////////////////////////////////////
         else if(ii==0)
    	 {
             if(cnt==1)
        	 {
                 state=2;
                 lcd_wrcmd(1);
            	 break;
        	  }
              else if(cnt==2)
        	  {
                  state=3;
                  lcd_wrcmd(1);
            	  break;
        	  }
              else if(cnt==3)
        	  {
                  state=4;
                  lcd_wrcmd(1);
            	  break;
              }				    
              else if(cnt==4)     //help
        	  {
                  state=5;
                  lcd_wrcmd(1);
            	  break;
        	  }
         }
////////////////////////快捷键///////////////////////////////////////////
         else if(ii==15)
    	 {
              state=2;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==11)
    	 {
              state=3;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==7)
    	 {
              state=4;
              lcd_wrcmd(1);
              break;
    	 }
         else if(ii==3)
    	 {
               state=5;
              lcd_wrcmd(1);
               break;
         }    


     }




}


help()
{
    uchar i,ii;
    lcd_wrcmd(0x80);
    for(i=0;i<16;i++)
    {
        lcd_wrdata(he[i]);
    }
    while(1)
    {
        ii=getkey();
        if(ii!=0xff)
    	{
            lcd_wrcmd(1);
            state=1;
            break;
    	 }
    	
        
    }

}*/


main()
{
     /*     lcd_bus=0xff;
          lcd_ini();*/
          sanjiao();  
        /*  while(1)
         {
           if(state==0)welcome();
           else if(state==1)menu();
           else if(state==2)
           else if(state==3)sanjiaobo(200,20);
           else if(state==4)zhengxianbo();
           else if(state==5)help();
         }*/
           
}
    		



⌨️ 快捷键说明

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