標(biāo)題:
使用PROUEUS仿真一線串口屏MILFORD-2X16-BKP
[打印本頁]
作者:
hbyczcp
時(shí)間:
2024-6-4 15:14
標(biāo)題:
使用PROUEUS仿真一線串口屏MILFORD-2X16-BKP
/********************************************************
* 一線串口屏顯示示例,未經(jīng)過實(shí)物屏測(cè)試
* MILFORD-2X16-BKP__proteue仿真軟件自帶屏幕
* 波特率9600、晶振頻率11.0592
*********************************************************/
#include <REGX51.H>
#include <intrins.h>
#include <string.h>
/********************************************************/
void SendOneByte(unsigned char c);
/********************************************************/
#define uart 1 //1:硬件串口; 0:模擬串口。
sbit TX = P3^1;
/********************************************************/
#define LCD_CLR 0x01 //清屏命令
#define LINE1 0x80 //第1行地址
#define LINE2 0xC0 //第2行地址
#define COMMAND 0xFE //命令碼
/********************************************************/
#define LCD_COMMAND(m) LCD_TX(COMMAND);LCD_TX(m)
#define LCD_CLEAR() LCD_COMMAND(LCD_CLR);Delay_ms(2)
/********************************************************/
char *str="123123123";
#ifdef uart
#else
void Delay_nus(char n)
{
while(n--)
{
_nop_();_nop_();_nop_();_nop_();
}
}
#endif
void Delay_ms(unsigned int n)
{
unsigned char a,b,c;
for(c=0;c<n;c++)
for(b=4;b>0;b--)
for(a=113;a>0;a--);
}
void LCD_TX(unsigned char str)
{
#ifdef uart //硬件串口
SendOneByte(str);
#else //模擬串口
char i=8;
TX=0;
Delay_nus(6); //延時(shí)
while(i--)
{
TX= (str&0x01);
Delay_nus(6); // 此延時(shí)要精確調(diào)整。。
str=str>>1;
}
TX=1;
Delay_nus(6); //延時(shí);
#endif
}
void LCD_Init(void)
{
LCD_COMMAND(0xC0); // D(d2) = 1,打開顯示;C(dl)= 0,光標(biāo)關(guān)閉;B(dO)= 0,光標(biāo)不閃(0b00001100)
LCD_COMMAND(0x01); // 清除顯示
Delay_ms(2);
LCD_COMMAND(0x06); // 輸入模式,I/D(dl)= 1,地址加1;S(dO) = 1,顯示移位關(guān)閉
Delay_ms(200); //延時(shí)不能太短
}
//串口配置:波特率9600、晶振頻率11.0592
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}
//串口發(fā)送1BYTE
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
//串口顯示字符串,字符為常數(shù)數(shù)組
void LCD_LINE1( char *S)
{
char i,N=3;
N = strlen(S);
for(i=0;i<N;i++)
#ifdef uart
SendOneByte(S[i]);
#else
LCD_TX(S[i]);
#endif
}
//*********************************************************************/
void main(void)
{
LCD_Init();
InitUART();
LCD_COMMAND(0x80); //LCD屏第1行第1列顯示(0x82為第3列)
LCD_LINE1("ABCDEFGHIJKLMNOP");
while(1)
{
LCD_COMMAND(0xc0); //LCD屏第2行第1列顯示
LCD_LINE1(str);
}
}
/*
*end
*/
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1