找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2903|回復: 0
打印 上一主題 下一主題
收起左側

51單片機+LCD12864(無字庫)顯示字符內(nèi)容,Proteus7.8仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:235954 發(fā)表于 2020-7-12 07:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用Protues7.8仿真測試,使用KEIL4,語言是KEIL4,制作了12864的驅動程序,希望能幫到初學者,程序都有一定注釋。建議零基礎的師兄下載來用。

單片機源程序如下:
  1. #include "reg52.h"
  2. #include  "string.h"
  3. #include  "stdio.h"


  4. sbit RS = P1^7;                   //控制端口
  5. sbit RW = P1^6;
  6. sbit E = P1^5;
  7. sbit PSB   = P3^2;
  8. sbit PAUSE = P0^3;
  9. sbit RES   = P0^2;
  10. #define DataPort P2        //單片機 P2<------> 液晶DB0-DB7


  11. sbit BEEP=P1^0        ;//蜂鳴器IO口定義
  12. sbit KEY1=P1^3; //撤銷按鍵IO口定義
  13. sbit LED=P1^1;//繼電器控制IO口定義
  14. #define SET_BEEP  BEEP = 0
  15. #define CLR_BEEP         BEEP = 1
  16. signed long  dat=0;
  17. unsigned char iii=0;
  18. char string[]="           ";
  19. //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
  20. //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
  21. unsigned char code data2[4]  = {0x12,0,0,0};
  22. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  23. unsigned char idata MLastSelectedSnr[4];
  24. unsigned char idata RevBuffer[30];  
  25. //unsigned char data SerBuffer[20];
  26. bit CmdValid;                           
  27. unsigned char code ASCII_NUM[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  28. unsigned char code  Yankey[6]  = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //原始密碼
  29. unsigned char code  XiugaiYunKey[16]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x07,0x80,0x69,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};         //修改后的密碼
  30. unsigned char code  Nowkey[6]  = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE}; //xianzia 密碼
  31. unsigned char code  XiugaiNowKey[16]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x80,0x69,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};        
  32. unsigned char idata Read_Data[16]={0x00};

  33. unsigned char data OperationCard;

  34. unsigned char data bWarn,bPass,ttt=0,tt=0;
  35. #define        REGCARD                        0xa1
  36. #define        CONSUME                        0xa2
  37. #define READCARD                0xa3
  38. #define ADDMONEY                0xa4
  39. #define CHEXIAO                  0xa5
  40. /*------------------------------------------------
  41. uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  42. unsigned char 是定義無符號字符變量,其值的范圍是
  43. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  44. 長度如下 T=tx2+5 uS
  45. ------------------------------------------------*/
  46. void DelayUs2x(unsigned char t)
  47. {   
  48. while(--t);
  49. }
  50. /*------------------------------------------------
  51. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  52. unsigned char 是定義無符號字符變量,其值的范圍是
  53. 0~255 這里使用晶振12M,精確延時請使用匯編
  54. ------------------------------------------------*/
  55. void DelayMs(unsigned char t)
  56. {
  57.      
  58. while(t--)
  59. {
  60.      //大致延時1mS
  61.      DelayUs2x(245);
  62.          DelayUs2x(245);
  63. }
  64. }


  65. void STC_send_bluetooth(unsigned char a)        //注意:若單片機TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻
  66. {                                                        
  67.         TI=0;        
  68.         SBUF=a;
  69.         while(TI==0);
  70.         TI=0;}
  71. void KeyScan(void) //獨立按鍵掃描
  72. {
  73.          char string[]="           ";
  74.         if(KEY1 == 0)//撤銷按鍵
  75.                 {
  76.                                 delay_10ms(1);
  77.                                 if(KEY1 == 0 )
  78.                                 {
  79.         OperationCard=CHEXIAO;
  80.           tt=5;}
  81. }
  82.                 if(REGCARDBTN == 0)//注冊按鍵
  83.                 {
  84.                                 delay_10ms(1);
  85.                                 if(REGCARDBTN == 0 )
  86.                                                 OperationCard = REGCARD;        
  87.                                 tt=1;
  88.                 }

  89.                 if(READCARDBTN == 0)//讀卡信息
  90.                 {
  91.                                 delay_10ms(1);
  92.                                 if(READCARDBTN == 0 )
  93.                                                 OperationCard = READCARD;        tt=4;
  94.         }
  95. }

  96. void Warn(void)  //蜂鳴器報警  長
  97. {         
  98.   uchar data ii;
  99.   for(ii=0;ii<3;ii++)
  100.   {
  101.     SET_BEEP;//ShortBeep();如果是有源蜂鳴器就一句SET_BEEP就ok了
  102.     delay_10ms(5);
  103.     CLR_BEEP;
  104.     delay_10ms(5);
  105.   }         
  106. }
  107. void WaitCardOff(void)
  108. {
  109.   char  status;
  110.   unsigned char        TagType[2];

  111.         while(1)
  112.         {
  113.                 status = PcdRequest(PICC_REQALL , TagType);
  114.                 if(status)
  115.                 {
  116.                         status = PcdRequest(PICC_REQALL , TagType);
  117.                         if(status)
  118.                         {
  119.                                 status = PcdRequest(PICC_REQALL , TagType);
  120.                                 if(status)
  121.                                 {
  122.                                         return;
  123.                                 }
  124.                         }
  125.                 }
  126.          //delay_10ms(5);
  127.         }
  128. }
  129. void Pass(void)//蜂鳴器報警 短
  130. {        
  131.   SET_BEEP;//LongBeep();如果是有源蜂鳴器就一句SET_BEEP就ok了
  132.   delay_10ms(30);
  133.   CLR_BEEP;
  134. }
  135. void CtrlProcess(void)//射頻讀卡程序
  136. {
  137.         
  138.                 unsigned char idata Write_Consume_Data[16];
  139.          
  140.                 signed long money_value;
  141.           unsigned char ii;
  142.           char status;
  143.           status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//尋天線區(qū)內(nèi)未進入休眠狀態(tài)的卡,返回卡片類型 2字節(jié)
  144.    
  145.           if(status!=MI_OK)
  146.                           return;
  147.                
  148.                 for(ii=0;ii<2;ii++)
  149.                 {
  150.                                 string[2*ii]   = ASCII_NUM[(RevBuffer[ii]>>4)&0x0f];
  151.                                 string[2*ii+1] = ASCII_NUM[RevBuffer[ii]&0x0f];
  152.                         
  153.                 }
  154.                 string[4] = '\0';
  155.                  LCD_PutString(0,2,"類型: 學?    ");//液晶顯示卡類型
  156.                  LCD_PutString(0,3,"卡號:           ");
  157.                   LCD_PutString(0,1,"               ");
  158.                 status=PcdAnticoll(&RevBuffer[2]);//防沖撞,返回卡的序列號 4字節(jié)
  159.                   
  160.                 if(status!=MI_OK)
  161.               return;

  162.           memcpy(MLastSelectedSnr,&RevBuffer[2],4);//4字節(jié)序列號 放到MLastSelectedSnr
  163.                 for(ii=0;ii<4;ii++)
  164.                 {
  165.                                 string[2*ii]   = ASCII_NUM[(MLastSelectedSnr[ii]>>4)&0x0f];
  166.                                 string[2*ii+1] = ASCII_NUM[MLastSelectedSnr[ii]&0x0f];
  167.                 }
  168.                 string[9] = '\0';
  169.                 LCD_PutString(3,3,string);// LCD顯示序列號
  170.                
  171.           status=PcdSelect(MLastSelectedSnr);//選卡

  172.           if(status!=MI_OK)
  173.                     return;
  174.                  

  175.                         if(OperationCard==REGCARD)//注冊程序
  176.           {
  177.                     while(1)
  178.                         {
  179.                         status=PcdAuthState(PICC_AUTHENT1A,7,Yankey,MLastSelectedSnr);//
  180.                     //DelayNS(1);
  181.                     if(status!=MI_OK)//已經(jīng)注冊顯示
  182.                     {                    LCD_PutString(0,4,"    已注冊:"); Warn();  WaitCardOff(); break; }
  183.                     status=PcdWrite(7,XiugaiYunKey);
  184.                     
  185.                                 if(status!=MI_OK)
  186.                     {
  187.                              // bWarn=1;
  188.                               break;
  189.                     }

  190.                     for(ii=0;ii<16;ii++)
  191.                     {
  192.                               Write_Consume_Data[ii]=0xaa;//Write_First_Data
  193.                     }
  194.                                 memset( Write_Consume_Data, 0, sizeof(Write_Consume_Data) );//Write_First_Data         Write_First_Data
  195.                                 money_value = 0000;
  196.                                 memcpy( Write_Consume_Data, ( uchar * )&money_value, 4 );        //Write_First_Data
  197.                     
  198.                                 status=PcdWrite(4,&Write_Consume_Data[0]);//Write_First_Data

  199.                     if(status!=MI_OK)
  200.                     {
  201.                               bWarn=1;
  202.                       break;
  203.                     }
  204.                                 LCD_PutString(0,4,"注冊: 成功");
  205.                                 //LCD_PutString(0,4,"             ");
  206.                       Pass();                                                
  207.                     PcdHalt();        
  208.                         }                                
  209.                 }
  210.                  if(OperationCard==CHEXIAO)//撤銷程序
  211.           {
  212.                     while(1)
  213.                         {
  214.                                 status = PcdAuthState(PICC_AUTHENT1A,7,Nowkey,MLastSelectedSnr);
  215.                     //DelayNS(1);
  216.                     if(status!=MI_OK)
  217.                     {                    LCD_PutString(0,4,"    已撤銷:"); Warn();  WaitCardOff(); break; }
  218.                     status=PcdWrite(7,XiugaiNowKey);
  219.                     
  220.                                 if(status!=MI_OK)
  221.                     {
  222.                              // bWarn=1;
  223.                               break;
  224.                     }

  225.                     for(ii=0;ii<16;ii++)
  226.                     {
  227.                               Write_Consume_Data[ii]=0xaa;//Write_First_Data
  228.                     }
  229.                                 memset( Write_Consume_Data, 0, sizeof(Write_Consume_Data) );//Write_First_Data         Write_First_Data
  230.                                 money_value = 0000;
  231.                                 memcpy( Write_Consume_Data, ( uchar * )&money_value, 4 );        //Write_First_Data
  232.                     
  233.                                 status=PcdWrite(4,&Write_Consume_Data[0]);//Write_First_Data

  234.                     if(status!=MI_OK)
  235.                     {
  236.                               bWarn=1;
  237.                       break;
  238.                     }
  239.                                 LCD_PutString(0,4,"注銷: 成功");
  240.                       Pass();                                                
  241.                     PcdHalt();        
  242.                         }                                
  243.                 }
  244.         
  245.           else if(OperationCard==READCARD)//讀卡
  246.           {
  247.                         while(1)
  248.                         {
  249.                     status=PcdAuthState(PICC_AUTHENT1A,7,Nowkey,MLastSelectedSnr);//????KUAI4?
  250.    
  251.                                 if(status!=MI_OK) //無效卡顯示
  252.                       {                    LCD_PutString(0,4,"    無效卡:    ");iii=2; Warn();  WaitCardOff(); break; }
  253.                     
  254.                                 status=PcdRead(4,Read_Data);
  255.              LED=0;        
  256.                                 if(status!=MI_OK)
  257.                     {
  258.                                                  //bWarn=1;
  259.                               break;
  260.                     }
  261.                                 memcpy( (uchar *)&money_value, Read_Data, 4 );
  262.                     PcdHalt();        
  263.                         }
  264.                         
  265.                          if(iii==1){ Warn(); }if(iii==0) Pass();iii=0;
  266.                    delay_10ms(10);
  267.                 }
  268.                  
  269.         WaitCardOff();               
  270.                      PcdHalt();//中止
  271.                     delay_10ms(100);
  272.          LED=1;        
  273. }

  274. void iccardcode()
  275. {            
  276.           unsigned char cmd;
  277.         unsigned char status;
  278.         
  279.         cmd = RevBuffer[0];
  280.         switch(cmd)
  281.          {
  282.                 case 1:     // Halt the card     //終止卡的操作
  283.                         status= PcdHalt();;                        
  284.                         RevBuffer[0]=1;
  285.                         RevBuffer[1]=status;
  286.                         break;                        
  287.                 case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
  288.                                 // 尋卡,防沖突,選擇卡    返回卡類型(2 bytes)+ 卡系列號(4 bytes)
  289.                         status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  290.                         if(status!=0)
  291.                         {
  292.                                 status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
  293.                                 if(status!=0)                                
  294.                                 {
  295.                                         RevBuffer[0]=1;        
  296.                                         RevBuffer[1]=status;
  297.                                         break;
  298.                                 }
  299.                         }  
  300.                         RevBuffer[0]=3;        
  301.                         RevBuffer[1]=status;
  302.                         break;
  303.                         
  304.                 case 3:                         // 防沖突 讀卡的系列號 MLastSelectedSnr
  305.                         status = PcdAnticoll(&RevBuffer[2]);
  306.                         if(status!=0)
  307.                         {
  308.                                 RevBuffer[0]=1;        
  309.                                 RevBuffer[1]=status;
  310.                                 break;
  311.                         }
  312.                         memcpy(MLastSelectedSnr,&RevBuffer[2],4);
  313.                         RevBuffer[0]=5;
  314.                         RevBuffer[1]=status;
  315.                         break;        
  316.                 case 4:                                    // 選擇卡 Select Card
  317.                         status=PcdSelect(MLastSelectedSnr);
  318.                         if(status!=MI_OK)
  319.                         {
  320.                                 RevBuffer[0]=1;        
  321.                                 RevBuffer[1]=status;
  322.                                 break;
  323.                         }
  324.                         RevBuffer[0]=3;
  325.                         RevBuffer[1]=status;                        
  326.                         break;
  327.                 case 5:            // Key loading into the MF RC500's EEPROM
  328.             status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗卡密碼
  329.                         RevBuffer[0]=1;
  330.                         RevBuffer[1]=status;                        
  331.                         break;                                                        
  332.                 case 6:
  333.                         RevBuffer[0]=1;
  334.                         RevBuffer[1]=status;                        
  335.                         break;                                
  336.                 case 7:     
  337.                     RevBuffer[0]=1;
  338.                         RevBuffer[1]=status;                        
  339.                         break;
  340.                 case 8:     // Read the mifare card
  341.                             // 讀卡
  342.                         status=PcdRead(RevBuffer[1],&RevBuffer[2]);
  343.                         if(status==0)
  344.                         {RevBuffer[0]=17;}
  345.                         else
  346.                         {RevBuffer[0]=1;}
  347.                         RevBuffer[1]=status;                        
  348.                         break;
  349.                 case 9:     // Write the mifare card
  350.                             // 寫卡  下載密碼
  351.                         status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
  352.                         RevBuffer[0]=1;
  353.                         RevBuffer[1]=status;                        
  354.                         break;
  355.                 case 10:
  356.             PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
  357.                         RevBuffer[0]=1;        
  358.                         RevBuffer[1]=status;
  359.                         break;
  360.                 case 12:    // 參數(shù)設置
  361.                     PcdBakValue(RevBuffer[1], RevBuffer[2]);
  362.                         RevBuffer[0]=1;        //contact
  363.                         RevBuffer[1]=0;
  364.                         break;               
  365.         }

  366.         }
  367. /*------------------------------------------------
  368.                     檢測忙位
  369. ------------------------------------------------*/
  370. void Check_Busy()
  371. {  
  372.     RS=0;
  373.     RW=1;
  374.     E=1;
  375.     DataPort=0xff;
  376.     while((DataPort&0x80)==0x80);//忙則等待
  377.     E=0;
  378. }
  379. /*------------------------------------------------
  380.                    寫命令
  381. ------------------------------------------------*/
  382. void Write_Cmd(unsigned char Cmd)
  383. {
  384.         Check_Busy();
  385.         RS=0;
  386.         RW=0;
  387.         E=1;
  388.         DataPort=Cmd;
  389.         DelayUs2x(5);
  390.         E=0;
  391.         DelayUs2x(5);
  392. }
  393. /*------------------------------------------------
  394.                     寫數(shù)據(jù)
  395. ------------------------------------------------*/
  396. void Write_Data(unsigned char Data)
  397. {
  398.         Check_Busy();
  399.         RS=1;
  400.         RW=0;
  401.         E=1;
  402.         DataPort=Data;
  403.         DelayUs2x(5);
  404.         E=0;
  405.         DelayUs2x(5);
  406. }
  407. /*------------------------------------------------
  408.                    液晶屏初始化
  409. ------------------------------------------------*/
  410. void Init_ST7920()
  411. {  
  412.    DelayMs(40);           //大于40MS的延時程序
  413.    PSB=1;                 //設置為8BIT并口工作模式
  414.    DelayMs(1);            //延時
  415.    RES=0;                 //復位
  416.    DelayMs(1);            //延時
  417.    RES=1;                 //復位置高
  418.    DelayMs(10);
  419.    Write_Cmd(0x30);       //選擇基本指令集
  420.    DelayUs2x(50);         //延時大于100us
  421.    Write_Cmd(0x30);       //選擇8bit數(shù)據(jù)流
  422.    DelayUs2x(20);         //延時大于37us
  423.    Write_Cmd(0x0c);       //開顯示(無游標、不反白)
  424.    DelayUs2x(50);         //延時大于100us
  425.    Write_Cmd(0x01);       //清除顯示,并且設定地址指針為00H
  426.    DelayMs(15);           //延時大于10ms
  427.    Write_Cmd(0x06);       //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位,光標從右向左加1位移動
  428.    DelayUs2x(50);         //延時大于100us
  429. }
  430. /*------------------------------------------------
  431.                    顯示字符串
  432. x:橫坐標值,范圍0~8
  433. y:縱坐標值,范圍1~4
  434. ------------------------------------------------*/
  435. void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
  436. {
  437. switch(y)
  438.      {
  439.           case 1: Write_Cmd(0x80+x);break;
  440.           case 2: Write_Cmd(0x90+x);break;
  441.           case 3: Write_Cmd(0x88+x);break;
  442.           case 4: Write_Cmd(0x98+x);break;
  443.       default:break;
  444.          }
  445. while(*s>0)
  446.    {
  447.       Write_Data(*s);
  448.       s++;
  449.       DelayUs2x(50);
  450.    }
  451. }
  452. /*------------------------------------------------
  453.                       清屏
  454. ------------------------------------------------*/
  455. void ClrScreen()
  456. {
  457.    Write_Cmd(0x01);
  458.    DelayMs(15);
  459. }
  460. /////////////////////////////////////////////////////////////////////
  461. //系統(tǒng)初始化
  462. /////////////////////////////////////////////////////////////////////
  463. void InitializeSystem()//射頻初始化
  464. {

  465.         CmdValid=0;

  466.      LED_GREEN = 1;
  467.      PcdReset();
  468.      PcdAntennaOff();
  469.      PcdAntennaOn();  
  470.          M500PcdConfigISOType( 'A' );
  471.      LED_GREEN = 0;
  472.           delay_10ms(10);        
  473.      LED_GREEN = 1;
  474.           delay_10ms(10);
  475.      LED_GREEN = 0;
  476. }

  477. /////////////////////////////////////////////////////////////////////
  478. //用T2做延時子程序
  479. /////////////////////////////////////////////////////////////////////


  480. ///////////////////////////////////////////////////////////////////////
  481. // 接收和發(fā)送中斷
  482. ///////////////////////////////////////////////////////////////////////
  483. void isr_UART(void) interrupt 4 using 1
  484. {
  485.     unsigned char len, i;
  486.           unsigned int j=0;
  487.          
  488.           if(RI)
  489.         {               
  490.                 len=SBUF;
  491.                 RI=0;        
  492.                 for(i=0;i<len;i++)
  493.                 {
  494.                         while(!RI)
  495.                         {
  496.                                 j++;
  497.                                 if(j>1000)
  498.                                 {
  499.                                     break;
  500.                                 }
  501.                         }
  502.                         if(j<1000)
  503.                         {
  504.                                 RevBuffer[i]=SBUF;
  505.                                 RI=0;
  506.                                 j=0;
  507.                         }
  508.                         else
  509.                         {
  510.                             break;
  511.                         }
  512.                 }
  513.                 if(i==len)
  514.                 {
  515.                         REN=0;
  516.                         CmdValid=1;
  517.                 }
  518.         }
  519.         else if(!RI && TI)
  520.         {
  521.                 TI=0;
  522.                 len=RevBuffer[0];
  523.                 for(i=0;i<len+1;i++)
  524.                 {
  525.                         SBUF=RevBuffer[i];
  526.                         while(!TI);
  527.                         TI=0;                        
  528.                 }
  529.                 REN=1;
  530.         }
  531. }

  532. void UartProcess(void)
  533. {
  534.     unsigned char baud;

  535.                 if(RevBuffer[0]==11)            //為了加快相應速度 測試風鳴器
  536.                 {
  537.                                 RevBuffer[2]=RevBuffer[1];
  538.                           RevBuffer[0]=1;         //contact
  539.                                 RevBuffer[1]=0;
  540.                                 CALL_isr_UART();               
  541.         LED_GREEN = 1;
  542.                                 delay_10ms(RevBuffer[2]);
  543.         LED_GREEN = 0;
  544.                 }
  545.                 else if(RevBuffer[0]==13)   //設置通訊波特率
  546.           {
  547.                                 switch(RevBuffer[1])
  548.                                 {
  549.                                                 case 0:
  550.                                                                 baud=BAUD_9600;
  551.                                                                 break;
  552.                                                 
  553.                                 }        
  554.                                 RevBuffer[0]=1;                //contact
  555.                     RevBuffer[1]=0;
  556.                     CALL_isr_UART();
  557.                     delay_10ms(5);                        
  558.                     TR1   = 0;
  559.                     TH1   = baud;
  560.                     TL1   = TH1;
  561.                     delay_10ms(2);
  562.                     TR1   = TRUE;
  563.                 }
  564.                 else
  565.                 {
  566.         iccardcode();
  567.                                 CALL_isr_UART();
  568.                 }                        
  569. }

  570. void InitializeSystem1()
  571. {
  572.         P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;P2 = 0xFF;
  573.     TMOD = 0x21;  
  574.     TH1 = 0xFd;                     //11.0592M晶振,9600波特率
  575.     TL1 = 0xFd;
  576.     TH0 = 0xfe;                     //11.0592M晶振,9600波特率
  577.     TL0 = 0x33;         
  578.         
  579.         ET0 = 1;
  580.     TR0 = 1;

  581.         SM0 = 0;
  582.         SM1 = 1;
  583.         REN = 1;//允許串口接收
  584.         TR1 = 1;
  585.         ES = 1;//開串口 中斷
  586.         EA = 1;
  587. }  


  588. void timer0() interrupt 1          /* T0中斷服務程序 */
  589. ……………………

  590. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料51hei下載地址:
32.12864顯示內(nèi)容.zip (250.12 KB, 下載次數(shù): 40)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表