找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 1137|回復(fù): 0
收起左側(cè)

使用PROUEUS仿真一線串口屏MILFORD-2X16-BKP

[復(fù)制鏈接]
ID:237044 發(fā)表于 2024-6-4 15:14 | 顯示全部樓層 |閱讀模式
  1. /********************************************************
  2. *           一線串口屏顯示示例,未經(jīng)過實(shí)物屏測(cè)試  
  3. *          MILFORD-2X16-BKP__proteue仿真軟件自帶屏幕
  4. *                                        波特率9600、晶振頻率11.0592
  5. *********************************************************/

  6. #include <REGX51.H>
  7. #include <intrins.h>
  8. #include <string.h>
  9. /********************************************************/

  10. void SendOneByte(unsigned char c);

  11. /********************************************************/
  12. #define   uart      1  //1:硬件串口;     0:模擬串口。   

  13. sbit  TX = P3^1;            

  14. /********************************************************/

  15. #define   LCD_CLR        0x01                //清屏命令
  16. #define   LINE1          0x80                //第1行地址
  17. #define   LINE2          0xC0                //第2行地址
  18. #define   COMMAND        0xFE                //命令碼

  19. /********************************************************/

  20. #define   LCD_COMMAND(m)    LCD_TX(COMMAND);LCD_TX(m)                                                                                                
  21. #define   LCD_CLEAR()       LCD_COMMAND(LCD_CLR);Delay_ms(2)

  22. /********************************************************/
  23. char  *str="123123123";

  24. #ifdef uart           
  25. #else                 
  26. void Delay_nus(char n)
  27. {              
  28.                 while(n--)
  29.                 {        
  30.                                 _nop_();_nop_();_nop_();_nop_();
  31.                 }
  32. }
  33. #endif

  34. void Delay_ms(unsigned int n)
  35. {      
  36.         unsigned char a,b,c;
  37.     for(c=0;c<n;c++)
  38.         for(b=4;b>0;b--)
  39.             for(a=113;a>0;a--);
  40. }

  41. void LCD_TX(unsigned char str)         
  42. {        
  43. #ifdef  uart                    //硬件串口
  44.        SendOneByte(str);
  45. #else                            //模擬串口
  46.                         char i=8;

  47.        TX=0;                        
  48.        Delay_nus(6);  //延時(shí)
  49.        while(i--)
  50.        {      
  51.             TX= (str&0x01);      
  52.             Delay_nus(6);  // 此延時(shí)要精確調(diào)整�。�!   
  53.             str=str>>1;        
  54.        }
  55.         TX=1;
  56.         Delay_nus(6);  //延時(shí);  
  57. #endif                        
  58. }
  59. void LCD_Init(void)
  60. {        
  61.                 LCD_COMMAND(0xC0);   //  D(d2) = 1,打開顯示;C(dl)= 0,光標(biāo)關(guān)閉;B(dO)= 0,光標(biāo)不閃(0b00001100)   
  62.     LCD_COMMAND(0x01);   //  清除顯示   
  63.     Delay_ms(2);                                 
  64.     LCD_COMMAND(0x06);   // 輸入模式,I/D(dl)= 1,地址加1;S(dO) = 1,顯示移位關(guān)閉
  65.     Delay_ms(200);                 //延時(shí)不能太短
  66. }

  67. //串口配置:波特率9600、晶振頻率11.0592
  68. void InitUART(void)  
  69. {
  70.     TMOD = 0x20;
  71.     SCON = 0x50;
  72.     TH1 = 0xFD;
  73.     TL1 = TH1;
  74.     PCON = 0x00;
  75.     TR1 = 1;
  76. }
  77. //串口發(fā)送1BYTE
  78. void SendOneByte(unsigned char c)
  79. {
  80.     SBUF = c;
  81.     while(!TI);
  82.     TI = 0;
  83. }

  84. //串口顯示字符串,字符為常數(shù)數(shù)組
  85. void LCD_LINE1( char *S)
  86. {      
  87.         char i,N=3;
  88.               N = strlen(S);               
  89.         
  90.         for(i=0;i<N;i++)                           
  91. #ifdef  uart
  92.                 SendOneByte(S[i]);
  93. #else                                          
  94.                 LCD_TX(S[i]);
  95. #endif                                       
  96. }

  97. //*********************************************************************/
  98. void main(void)
  99. {
  100.         
  101.                 LCD_Init();
  102.                 InitUART();
  103.         
  104.           LCD_COMMAND(0x80);      //LCD屏第1行第1列顯示(0x82為第3列)
  105.           LCD_LINE1("ABCDEFGHIJKLMNOP");        
  106.          
  107.                   
  108.           while(1)
  109.                 {        
  110.                                 LCD_COMMAND(0xc0); //LCD屏第2行第1列顯示        
  111.                           LCD_LINE1(str);
  112.                 }

  113. }
  114. /*
  115. *end
  116. */
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表