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

📄 最后完整的串行显示程序.c

📁 该资源是自动运水机器人的制作资料 希望大家给以好评 很好的资源
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit L_SCK =P3^2;
sbit L_SI =P3^1;
sbit L_EN =P3^0;
sbit L_PS= P3^3;
#define LOW 0
#define HIGH 1
void lcd_writecmd(unsigned char lcddata)
{
    unsigned char lcdopt;
    register unsigned char i;
    register unsigned char temp;
    EA=0;
    L_EN = LOW;
    L_SI = LOW;
    L_SCK = LOW;
    L_EN = HIGH;
    L_SI = HIGH;
    for (i=0;i<5;i++)//写前五位1
    {
     L_SCK = HIGH;L_SCK = LOW;
    }
    L_SI = LOW;   //写如后三位0
    L_SCK = HIGH;
    L_SCK = LOW;
    L_SI = LOW;
    L_SCK = HIGH;
    L_SCK = LOW;
    L_SI = LOW;
    L_SCK = HIGH;
    L_SCK = LOW;
    temp = lcddata&0xf0;
    for (i=0;i<8;i++)
    {
     L_SI = (temp&0x80)?HIGH:LOW;
     temp <<=1;
     L_SCK = HIGH;
     L_SCK = LOW;
    }
    temp = (lcddata<<4)&0xf0;
    for (i=0;i<8;i++)
    {
     L_SI = (temp&0x80)?HIGH:LOW;
     temp <<=1;
     L_SCK = HIGH;L_SCK = LOW;
    }
    L_EN = LOW;
    L_SI = LOW;
    L_SCK = LOW;
    lcdopt = 0;
    EA=1;
}
/***************************************************
//写数据
/**************************************************/
void lcd_writedata(unsigned char lcddata)
{
    register unsigned char temp;
    register unsigned char i;
    unsigned char lcdopt;
    EA=0;
    L_EN = LOW;
    L_SI = LOW;
    L_SCK = LOW;
    L_EN = HIGH;
    //    11111 010,写数据
    L_SI = HIGH;
    for (i=0;i<5;i++){L_SCK = HIGH;L_SCK = LOW;}
    L_SI = LOW;
    L_SCK = HIGH;L_SCK = LOW;
    L_SI = HIGH;
    L_SCK = HIGH;L_SCK = LOW;
    L_SI = LOW;
    L_SCK = HIGH;L_SCK = LOW;
    //    HHHH0000,写高四位
    temp = (lcddata)&0xf0;
    for (i=0;i<8;i++)
    {
        L_SI = (temp&0x80)?HIGH:LOW;
        temp <<=1;
        L_SCK = HIGH;L_SCK = LOW;
    }
    //    LLLL0000,写低四位
    temp = ((lcddata)<<4)&0xf0;
    for (i=0;i<8;i++)
    {
        L_SI = (temp&0x80)?HIGH:LOW;
        temp <<=1;
        L_SCK = HIGH;L_SCK = LOW;
    }
    L_EN = LOW;
    L_SI = LOW;
    L_SCK = LOW;
    lcdopt = 0;
    EA=1;
}
void lcd_cmd(unsigned char cmd,unsigned char opt)
{
 switch (cmd)
 {
  //基本指令     //扩展指令
  case 0:lcd_writecmd(0x01);break;                //清除                 //待命模式
  case 1:lcd_writecmd(0x02);break;                //位址归位             //卷动位址或RAM位址选择
  case 2:opt&=0x03;lcd_writecmd(0x04|opt);break;  //进入点设定           //反白选择
  case 3:opt&=0x07;lcd_writecmd(0x08|opt);break;  //显示状态             //睡眠模式
  case 4:opt&=0x0f;lcd_writecmd(0x10|opt);break;  //游标或显示移位控制   //扩充功能设定
  case 5:opt&=0x1f;lcd_writecmd(0x20|opt);break;  //功能设定             //设定ICONRAM位址或卷动位址
  case 6:opt&=0x3f;lcd_writecmd(0x40|opt);break;  //CGRAM位址            //设定绘图RAM位址
  case 7:opt&=0x3f;lcd_writecmd(0x80|opt);break;  //DDRAM位址
    }
}

void lcd_home(void)
{
    lcd_cmd(1,0);
    lcd_cmd(2,0x02);
}
/***************************************************
//LCD初始化
/**************************************************/
void lcd_init(void)
{
 L_PS = 0;
 lcd_cmd(5,0x10);
 lcd_cmd(5,0x10);
 lcd_cmd(3,0x04);
 lcd_cmd(2,0x02);
 lcd_cmd(0,0);
}
/***************************************************
//写入字符串
/**************************************************/
void lcd_writestr(unsigned char l_line,unsigned char l_site,unsigned char * words)
{
//    l_line:行0-3; l_site:列 0-7; words:中英字符
 unsigned char c;
 c = 0;
 l_site = l_site % 8;                  //使列在0-7范围
 if(l_line>1)                          //若行=2,3
 {
  l_line = l_line % 2;                 //2行变0行,3行变1行
  l_site = l_site + 8;                 //列加8
 }
 l_site = (l_line<<4) + l_site;        //行*16+列
 lcd_cmd(7,l_site);                    //DDRAM地址

 while(*words != 0)                    //写字符
 {
  unsigned char tempdata;
  tempdata = *words;
  lcd_writedata(tempdata);
  words++;
  l_site++;
  c++;
 }
 if (c%2)                              //写完数据,若最后一个字符列号是奇数则补空格
 {
 lcd_writedata(0x20);
 }
}
/***************************************************
//主函数
/**************************************************/
void main()
{
unsigned int shuiliang1=456;
unsigned int shuiliang2=411;
unsigned int zongshuiliang=shuiliang1+shuiliang2;
unsigned int FT=64;
unsigned int ST=66;
unsigned char s1[6];
unsigned char s2[6];
unsigned char zong[6];
unsigned char time1[6];
unsigned char time2[6];

s1[2] = (unsigned char)((shuiliang1 % 10) + 0x30);
s1[1] = (unsigned char)(((shuiliang1 / 10) % 10) + 0x30);
s1[0] = (unsigned char)(((shuiliang1 / 100) % 10) + 0x30);

s2[2] = (unsigned char)((shuiliang2 % 10) + 0x30);
s2[1] = (unsigned char)(((shuiliang2 / 10) % 10) + 0x30);
s2[0] = (unsigned char)(((shuiliang2 / 100) % 10) + 0x30);

zong[3] = (unsigned char)((zongshuiliang % 10) + 0x30);
zong[2] = (unsigned char)(((zongshuiliang / 10) % 10) + 0x30);
zong[1] = (unsigned char)(((zongshuiliang / 100) % 10) + 0x30);
zong[0] = (unsigned char)(((zongshuiliang / 1000) % 10) + 0x30);

time1[1] = (unsigned char)((FT % 10) + 0x30);
time1[0] = (unsigned char)(((FT / 10) % 10) + 0x30);

time2[1] = (unsigned char)((ST % 10) + 0x30);
time2[0] = (unsigned char)(((ST / 10) % 10) + 0x30);

lcd_init();//初始化,开机调用一次
lcd_home();
lcd_writestr(0,0,"第一次:");
lcd_writestr(0,4,s1);
lcd_writestr(0,7,"ml");
lcd_writestr(1,0,"第二次:");
lcd_writestr(1,4,s2);
lcd_writestr(1,7,"ml");
lcd_writestr(2,0,"总水量:");
lcd_writestr(2,4,zong);
lcd_writestr(3,0,"FT:");
lcd_writestr(3,2,time1);
lcd_writestr(3,3,"秒");
lcd_writestr(3,4,"ST:");
lcd_writestr(3,6,time2);
lcd_writestr(3,7,"秒");

while(1);
}

⌨️ 快捷键说明

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