找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 493|回复: 0
收起左侧

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

[复制链接]
ID:237044 发表于 2024-6-4 15:14 | 显示全部楼层 |阅读模式
  1. /********************************************************
  2. *           一线串口屏显示示例,未经过实物屏测试  
  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);  //延时
  49.        while(i--)
  50.        {      
  51.             TX= (str&0x01);      
  52.             Delay_nus(6);  // 此延时要精确调整!!!   
  53.             str=str>>1;        
  54.        }
  55.         TX=1;
  56.         Delay_nus(6);  //延时;  
  57. #endif                        
  58. }
  59. void LCD_Init(void)
  60. {        
  61.                 LCD_COMMAND(0xC0);   //  D(d2) = 1,打开显示;C(dl)= 0,光标关闭;B(dO)= 0,光标不闪(0b00001100)   
  62.     LCD_COMMAND(0x01);   //  清除显示   
  63.     Delay_ms(2);                                 
  64.     LCD_COMMAND(0x06);   // 输入模式,I/D(dl)= 1,地址加1;S(dO) = 1,显示移位关闭
  65.     Delay_ms(200);                 //延时不能太短
  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. //串口发送1BYTE
  78. void SendOneByte(unsigned char c)
  79. {
  80.     SBUF = c;
  81.     while(!TI);
  82.     TI = 0;
  83. }

  84. //串口显示字符串,字符为常数数组
  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. */
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表