精华内容
下载资源
问答
  • 使用51单片机驱动oled显示屏,提供字符串显示和浮点数显示函数,提供主函数供参考调用方法。
  • 基于单片机的液晶屏代码
  • 彩屏程序 1_77寸 TFT彩屏使用文档 竖写汉字实验 时钟温度 1.77寸彩屏显示贪吃蛇实验
  • 想问一下51单片机OLED显示屏使用方法,比如我想显示一个字符串,它具体需要什么代码
  • 基于89c51单片机的lcd的显示c语言代码
  • C51单片机液晶编程源代码 128X64液晶 C编程
  • 有关单片机的初级知识,基本实战经验,以及旋转显示屏程序
  • 2.8寸TFT显示屏代码资料,使用手册,详细的电路图,硬件引脚图
  • 在之前的学习中对于多界面切换显示。。是非常的头疼的一件事。。感觉无从下手。 在公司看了下前辈们写的多界面切换代码后才发现。。原来多界面的切换,只要理清思路也不是特别难。。 在进行多界面切换时,一定要...

            在之前的学习中对于多界面切换显示。。是非常的头疼的一件事。。感觉无从下手。

    在公司看了下前辈们写的多界面切换代码后才发现。。原来多界面的切换,只要理清思路也不是特别难。。

    在进行多界面切换时,一定要理清编程思路,也就是,有几个界面界面的切换顺序是什么。。。。

    在编程时。。枚举类型就派上用场了,,我们可以将每个界面用枚举中的一个元素表示例如:

    enum

    {

                 UI_1;

                 UI_2;

                 UI_3;

    }

    在进行界面的切换的时候我们只需要用一个switch语句即可进行界面的切换。

    当能进行界面的切换时。我们不同的界面也有不同的功能选项,以及显示的字符,我们只需要在主循环中判断当前处于哪个界面,对应不同的界面只需要编写相应的显示函数,即可使得编程思路扁的清晰。。。

    在界面的功能选项上我们也能通过结构体来管理每个界面的各个选项。。。。使得代码便于阅读编程思路变的清晰。

    在使用结构体管理时,为了避免结构体对齐和补齐消耗单片机的内存,我们可以使用关键字__packed这个关键字可以使得结构体以一字节对齐有效地避免的内存的浪费。。。。

    例如:

    __packed struct       DAT  
    {     
            unsigned char  b;
            unsigned char  a;
            unsigned int  c;  

    }

    此时结构体所占字节为;6字节。。

    总结:在进行这种复杂场景的编程时一定要理清思路,将每个不同场景分类处理就会变得思路清晰。其实这就是一种状态机的编程思想。。。

    展开全文
  • 显示屏幕说明图: 仿真电路图: 仿真结果展示: 汉字取模软件设置: (取模软件下载链接在文章结尾) C语言程序代码: #include <reg51.h> #define LCDLCDDisp_Off 0x3e// 程序中 的 LCD_OFF (LCD 断开/...

    12864简介:

    点我点我点我查看12864简介

    显示屏幕说明图:

    在这里插入图片描述

    仿真电路图:

    在这里插入图片描述

    仿真结果展示:

    在这里插入图片描述

    汉字取模软件设置:

    (取模软件下载链接在文章结尾)
    在这里插入图片描述

    C语言程序代码:

    #include <reg51.h>
    
    #define LCDLCDDisp_Off   0x3e//   程序中 的 LCD_OFF (LCD 断开/不亮) 的值 是 16进制 0x3E
    #define LCDLCDDisp_On    0x3f//   程序中 的 LCD_ON (LCD 合上/亮) 的值 是 16进制 0x3F
    #define Page_Add         0xb8//   页地址
    #define LCDCol_Add       0x40//   列地址
    #define Start_Line       0xC0//   行地址
    /*****液晶显示器的端口定义*****/
    #define data_ora P0 /*液晶数据总线*/
    sbit LCD_CS1=P2^4 ;    /*CS1为1时选择右半屏*/
    sbit LCD_CS2=P2^3 ;    /*CS2为1时选择左半屏*/
    sbit RESET=P2^3 ;  /*复位信号*/
    sbit LCDDi=P2^2 ;     /*数据/指令 选择*/
    sbit LCDRW=P2^1 ;     /*读/写 选择*/
    sbit LCDEnable=P2^0 ;     /*读/写 使能*/
    
    
    
    char code Hz_yang[]= 
    {
    0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,
    0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00
    
    };
    
    char code Hz_guang[]= 
    {
    0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x64,0x40,0x00,
    0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x70,0x00
    };
    
    
    char code Hz_zheng[]= 
    {
    0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,
    0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00
    };
    
    char code Hz_hao[]= 
    {
    0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
    0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
    };
    
    char code Hz_wei[]= 
    {
    0x10,0x88,0xC4,0xA3,0xBC,0xA0,0xBF,0xA0,0xBC,0x20,0xD8,0x17,0x90,0x78,0x10,0x00,
    0x01,0x00,0xFF,0x40,0x3E,0x02,0x02,0x3E,0x90,0x48,0x33,0x0C,0x33,0xC0,0x40,0x00
    };
    
    
    char code Hz_feng[]= 
    {
    0x00,0x00,0xFE,0x02,0x0A,0x12,0x62,0x82,0x62,0x1A,0x02,0xFF,0x02,0x00,0x00,0x00,
    0x80,0x40,0x3F,0x20,0x10,0x08,0x06,0x01,0x06,0x18,0x00,0x3F,0x40,0x80,0xE0,0x00
    };
    
    
    
    char code Hz_bu[]= 
    {
    0x02,0x02,0x02,0x02,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x02,0x03,0x02,0x00,
    0x00,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x03,0x06,0x00,0x00
    };
    
    char code Hz_zao[]= 
    {
    0x80,0x70,0x00,0xFF,0x20,0x10,0x08,0xE0,0x2F,0xE9,0x09,0xE9,0x2F,0xE0,0x00,0x00,
    0x40,0x20,0x18,0x07,0x08,0x30,0x44,0x25,0x15,0x0D,0xFE,0x0D,0x35,0x65,0x24,0x00
    };
    /****************************************************************************
    函数功能:LCD延时程序
    入口参数:t
    出口参数:
    ****************************************************************************/
    void LCDdelay(unsigned int t)
    {
    	unsigned int i,j;
    	for(i=0;i<t;i++);
    	for(j=0;j<10;j++);
    }
    /****************************************************************************
    状态检查,LCD是否忙
    
    
    *****************************************************************************/
    void CheckState()		
    {
       unsigned char dat,DATA;//状态信息(判断是否忙)
       LCDDi=0; // 数据\指令选择,D/I(RS)="L" ,表示 DB7∽DB0 为显示指令数据 
       LCDRW=1; //R/W="H" ,E="H"数据被读到DB7∽DB0 
       do
       {
          DATA=0x00;
          LCDEnable=1;	//EN下降源
    	  LCDdelay(2);//延时
    	  dat=DATA;
          LCDEnable=0;
          dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
        }
        while(dat!=0x00);
    }
    /*****************************************************************************
    函数功能:写命令到LCD程序,RS(DI)=L,RW=L,EN=H,即来一个脉冲写一次
    入口参数:cmdcode
    出口参数:
    *****************************************************************************/
    void write_com(unsigned char cmdcode)
    {
        CheckState();//检测LCD是否忙
    	LCDDi=0;
    	LCDRW=0;
    	P1=cmdcode;		
    	LCDdelay(2);
    	LCDEnable=1;
    	LCDdelay(2);
    	LCDEnable=0;//E下降沿将命令锁存到DB0-DB7
    }
    
    /*****************************************************************************
    函数功能:写数据到LCD程序,RS(DI)=H,RW=L,EN=H,即来一个脉冲写一次
    入口参数:LCDDispdata
    出口参数:
    *****************************************************************************/
    void write_data(unsigned char LCDDispdata)
    {
        CheckState();//检测LCD是否忙
    	LCDDi=1;
    	LCDRW=0;
    	P1=LCDDispdata;
    	LCDdelay(2);
    	LCDEnable=1;
    	LCDdelay(2);
    	LCDEnable=0;
    }
    /*****************************************************************************
    函数功能:清除LCD内存程序
    入口参数:pag,col,hzk
    出口参数:
    *****************************************************************************/
    void Clr_Scr()
    {
    	unsigned char j,k;
    	LCD_CS1=0; //左、右屏均开显示
    	LCD_CS2=0;
     	write_com(Page_Add+0);
     	write_com(LCDCol_Add+0);
     	for(k=0;k<8;k++)//控制页数0-7,共8页
     	{
    		write_com(Page_Add+k); //每页每页进行写
      		for(j=0;j<64;j++)  //每页最多可写32个中文文字或64个ASCII字符
    		{
          		write_com(LCDCol_Add+j);
    			write_data(0x00);//控制列数0-63,共64列,写点内容,列地址自动加1
    		}
    	}
    }
    /*****************************************************************************
    函数功能:指定位置显示汉字16*16程序
    入口参数:page,column,hzk
    出口参数:
    *****************************************************************************/
    void hz_LCDDisp16(unsigned char page,unsigned char column, unsigned char code *hzk)
    {
    	unsigned char j=0,i=0;
    	for(j=0;j<2;j++)
    	{
    		write_com(Page_Add+page+j);
    		write_com(LCDCol_Add+column);
    		for(i=0;i<16;i++) 
    			write_data(hzk[16*j+i]);
    	}
    }
    
    /*****************************************************************************
    函数功能:LCD初始化程序
    入口参数:
    出口参数:
    *****************************************************************************/
    void init_lcd()
    {
    	LCDdelay(100);	
    	LCD_CS1=1;//刚开始关闭两屏
    	LCD_CS2=1;
    	LCDdelay(100);
    	write_com(LCDLCDDisp_Off);	 //写初始化命令
    	write_com(Page_Add+0);
    	write_com(Start_Line+0);
    	write_com(LCDCol_Add+0);
    	write_com(LCDLCDDisp_On);
    }
    /*****************************************************************************/
    
    void main()
    { 
    	init_lcd();
    	Clr_Scr();
    	LCD_CS1=0; //左屏开显示
    	LCD_CS2=1;
    	hz_LCDDisp16(0,0,Hz_yang);
        hz_LCDDisp16(0,16,Hz_guang);
    	hz_LCDDisp16(0,32,Hz_zheng);
    	hz_LCDDisp16(0,48,Hz_hao);
    	
    	LCD_CS1=1; //右屏开显示
    	LCD_CS2=0;
    	hz_LCDDisp16(0,0,Hz_wei);
        hz_LCDDisp16(0,16,Hz_feng);
    	hz_LCDDisp16(0,32,Hz_bu);
    	hz_LCDDisp16(0,48,Hz_zao);
    	
    	while(1)
        {
      
    	}
    }
    
    
    

    仿真工程文件下载、HEX文件及C语言程序文件:

    =相关文件下载=

    字模提取软件下载:

    =字模软件下载=

    展开全文
  • 51单片机led显示代码

    2018-10-30 10:45:42
    利用C语言实现led控制。
  • 本人近期修改代码,利用51单片机驱动OLED液晶显示屏,显示汉字、数字、字符、图片,汉字利用取模软件进行取模
  • 代码适用于ILI9325驱动显示屏,在stm32f103上可跑,代码亲测可用,里面有很多字库均可选择使用
  • 经过测试,代码能正常运行,诺基亚5110显示屏单片机驱动程序
  • 很早以前做的课程设计哈~
  • 51单片机12864大液晶屏代码和电路图,可以仿真出结果,keil代码文件和电路
  • OLED 128*64显示屏代码

    2015-08-17 19:25:18
    内有3个文件,char为字模文件,先使用LCD_CLS初始化,x,y为坐标(0-127,0-7),定义4个GPIO口,只要修改GPIO口就可以方便实现移植。
  • 基于单片机温湿度采集及风速采集 液晶屏显示代码
  • PIC单片机驱动LCD断码屏代码生成工具PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分。 所以写了一个宏函数,自动生成驱动逻辑。

    PIC单片机驱动LCD断码屏代码生成工具

    PIC 16系列单片机部分型号都带有LCD(断码)驱动模块,
    在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分。
    所以写了一个宏函数,自动生成驱动逻辑。

    断码屏与驱动管脚对应关系

    断码屏的一位一般由8段构成:A,B,C,D,E,F,G,DP。

    构成对应图形:

         AAAAAA
        F      B
        F      B
        F      B
         GGGGGG
        E      C
        E      C
        E      C
         DDDDDD  DP

    每段对应PIC单片机的一个驱动管脚。而这个管脚由PIC单片机LCD驱动模块的LCDDATAX寄存器
    控制。通过PIC的寄存器映射头文件可以表示为COMxSEGy。

    头文件进行管脚配置

    首先定义每一位的各个段:

    #define LCD_A1          SEGx1COMy1
    #define LCD_B1          SEGx2COMy2
    #define LCD_C1          SEGx3COMy3
    #define LCD_D1          SEGx4COMy4
    #define LCD_E1          SEGx5COMy5
    #define LCD_F1          SEGx6COMy6
    #define LCD_G1          SEGx7COMy7
    #define LCD_DP1         SEGx8COMy8

    不同的数字由各段的亮暗来表示。例如第一位数字0表示为:

    LCD_A1 = 1;
    LCD_B1 = 1;
    LCD_C1 = 1;
    LCD_D1 = 1;
    LCD_E1 = 1;
    LCD_F1 = 1;
    LCD_G1 = 0;

    之后还需要定义数字位图,例如数字1和0定义为:

    #define LCD_DIGIT_0     (LCD_SEG_A|LCD_SEG_B|LCD_SEG_C|LCD_SEG_D|LCD_SEG_E|LCD_SEG_F)
    #define LCD_DIGIT_1     (LCD_SEG_B|LCD_SEG_C)

    函数自动生成

    之后对断码屏的每一位显示来说,就是对相应管脚的0,1赋值。利用定义好的
    命名规则可以利用宏函数来自动生成对应的显示函数。

    #define SEG_VALUE(seg, num, character) \
        if (character&LCD_SEG_##seg) \
        { \
            LCD_##seg##num = 1; \
        } \
        else \
        { \
            LCD_##seg##num = 0; \
        }
    
    #define SEG_GENERATE(num) \
        SEG_VALUE(A, num, character) \
        SEG_VALUE(B, num, character) \
        SEG_VALUE(C, num, character) \
        SEG_VALUE(D, num, character) \
        SEG_VALUE(E, num, character) \
        SEG_VALUE(F, num, character) \
        SEG_VALUE(G, num, character) \
    
    
    #define generate_begin(page)  \
    void lcd_##page##_display_value(unsigned char column, unsigned char character) \
    { \
        switch (column) \
        {
    
    #define generate_end() \
        default: \
            break; \
        } \
    }
    
    #define gnerate_column(col, num) \
        case col: \
        SEG_GENERATE(num); \
        break;
    
     /*define generate micro-define*/
    /*need add generate_column logic*/
    #define generate_page1_lcd_display_value() \
        generate_begin(page1) \
        gnerate_column(LCD_COLUMN_1, 1) \
        gnerate_column(LCD_COLUMN_2, 2) \
        gnerate_column(LCD_COLUMN_3, 3) \
        gnerate_column(LCD_COLUMN_4, 4) \
        generate_end()
    
    /*void lcd_page1_display_value(unsigned char column, unsigned char character)*/
    generate_page1_lcd_display_value()

    结束

    生成显示函数以后可以像如下调用:

    lcd_page1_display_value(LCD_COLUMN_1, LCD_DIGIT_0);

    在这里只是贴出了一个梗概,其中很多细节并没有写到,后续会考虑在github
    上贴出完整代码。
    如果有不明白的地方,尽可以提出。

    展开全文
  • 经过实际应用证明,本显示屏可以作为信息显示装置。用于公共场所来进行信息显示,而且具有工作稳定、字符清晰、亮度适中等特点。若所显示的信息较为简单,也可直接将信息代码拷入单片机中,还可以通过外扩储存器的...
  • 代码使用的硬件有DHT11温湿度传感器、lcd1602,at89c52单片机,外加按键电位器等器件,具体电路图没有给出,但应该问题不大,电路按照各模块的数据手册要求的来就行,很简单(lcd接线两种方式,和我的不同的话,...

    /***************************************/

    该代码使用的硬件有DHT11温湿度传感器、lcd1602,at89c52单片机,外加按键电位器等器件,具体电路图没有给出,但应该问题不大,电路按照各模块的数据手册要求的来就行,很简单(lcd接线两种方式,和我的不同的话,代码略有不同,自己琢磨)。

    此外改代码没有写报警功能,只写显示功能。虽然运行成功过,但是我只是在keil上把代码复制过来,可能会因为文字格式不兼容导致一些复制不一样,仅供参考不一定完全正确。欢迎大佬评论区指点错误,或者分享更好的算法

    注释我已经尽量给详细,若还不懂只能看数据手册了,太多细节不好在这赘述,我只解释算法

    /***************************************/

    #include <reg52.h>
    #include <intrins.h> 
    typedef unsigned char uchar;
    typedef unsigned int uint;
    typedef unsigned long ulong;
     uchar com,flag;
    uchar n,m,y,x,v,u,a1,a2; //温湿度上下限的参数,其中,n m是温湿度超标与否的标准,值为0或者1。这代码的温湿度报警没有用LED或者蜂鸣器,只用了一个软件参数n、m存储报警信息。需要添加报警功能的可以自己写额外的功能代码,然后nm两个参数就是功能传递参数。也可以写多一个串口输出代码,用串口调试助手输出n、m的值验证温湿度是否超标判断正确。
    void Delay1000ms()        //@11.0592MHz延时
    {
        unsigned char i, j, k;

        _nop_();
        i = 8;
        j = 1;
        k = 243;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);
    }
    void Delay500us()        //@11.0592MHz
    {
        uchar b;

        _nop_();
        b = 227;
        while (--b);
    }
    void Delay10us()        //@11.0592MHz
    {
        uchar a;

        a = 2;
        while (--a);
    }
    void delay(uint z)
    {
     uchar i,j;
     for(i=z;i>0;i--)
      for(j=110;j>0;j--);                 //ÑÓʱº¯Êý
    }
    //************************引脚定义*************

    /*******按键控制引脚定义*********/
    sbit y_tem_inse=P1^0;        //

    sbit y_tem_duce=P1^1;           //

    sbit x_tem_inse=P1^2;         //

    sbit x_tem_duce=P1^3;         //

    sbit u_hum_inse=P1^4;           //

    sbit u_hum_duce=P1^5;         //

    sbit v_hum_inse=P1^6;           //

    sbit v_hum_duce=P1^7;          //

    /***********其他功能引脚*****/
    sbit DQ=P2^1;    //DTH11

    //****LCD的****
    sbit RS=P2^7;
    sbit RW=P2^6;
    sbit EN=P2^5;
    #define DataPort P0 //LCD的接线,我的是8线接发
    //-----------------函数声明-------------
    void delay_us(uchar t);               
    void delay_ms(uchar t);
    bit LCD_Check_Busy(void);
    void LCD_Write_Com(uchar com);
    void LCD_Write_Data(uchar Data);
    void LCD_Clear(void);
    void LCD_Write_String(uchar x,uchar y,uchar *s);
    void LCD_Write_Char(uchar x,uchar y,uchar Data);
    void LCD_Init(void);
    void COMdata();
    //*************************以下是函数定义***************************
    //**************液晶屏显示原函数由此开始*************************
    bit LCD_Check_Busy(void) //检忙

        DataPort= 0xFF; 
        RS = 0;
        RW = 1;
        EN = 0;
        _nop_(); 
        EN = 1;
        return (bit)(DataPort & 0x80);
    }
    void LCD_Write_Com(uchar com) //写指令原函数
    {  
        while(LCD_Check_Busy());
        RS = 0;
        RW = 0;
        EN = 1;
        DataPort= com; 
        _nop_(); 
        EN = 0;
    }
    void LCD_Write_Data(uchar Data) //写数据原函数

        while(LCD_Check_Busy());
        RS = 1; 
        RW = 0;
        EN = 1;
        DataPort= Data; 
        _nop_();
        EN = 0;
    }
    void LCD_Clear(void)  //清屏

        LCD_Write_Com(0x01); 
        delay(1);
    }
    void LCD_Write_String(uchar x,uchar y,uchar *s)   //操作-显示LCD屏的哪个位置
    {     
        if (y == 0)      
            LCD_Write_Com(0x80 + x);
        else     
            LCD_Write_Com(0xC0 + x); 
        while (*s) 
        {     
        LCD_Write_Data( *s);     
        s ++;     
        }
    }
    void LCD_Write_Char(uchar x,uchar y,uchar Data) //操作-显示的数据(字符类型,显示数字需找到该数字的ASCII码)
    {     
        if(y == 0)   
            LCD_Write_Com(0x80 + x);  
        else   
            LCD_Write_Com(0xC0 + x);       
        LCD_Write_Data( Data);  
    }
    void LCD_Init(void) //LCD初始化(可以理解为唤醒)
    {
        delay(15); 
        LCD_Write_Com(0x38); 
        delay(5); 
        LCD_Write_Com(0x38); 
        delay(5); 
        LCD_Write_Com(0x38); 
        delay(5); 
        LCD_Write_Com(0x38);  
        LCD_Write_Com(0x08); 
        LCD_Write_Com(0x01);  
        LCD_Write_Com(0x06); 
        delay(5); 
        LCD_Write_Com(0x0C);  
    }
    //****************LCD源码结束***********
    //*********DHT11原函数以下开始*******
    //***************************************************
    uchar code ASCII[]="0123456789%c"; //普通数字需用该数组转成字符
    uchar code table0[]="Hum:";
    uchar code table1[]="Tem:";
    uchar tem;
    uchar hum;
    display0[2]={0,0};
    display1[2]={0,0};
    //*************************初始化DTH11
         void  COMdata()   //读数据
          { uchar i,t;
           for(i=0;i<8;i++)       
           {
            flag=2;    
               while((!DQ)&&flag++);
            Delay10us();
             Delay10us();
            Delay10us();         //先看懂DHT11的工作时序图就知道我这个延时操作的含义了,读高电平多少秒可以对应数据0或1
              t=0;
             if(DQ) t=1;
                flag=2;
             while((DQ)&&flag++);          
                if(flag==1)break;            
               com<<=1;
                  com|=t;        
             }
           
        }    
        void RH(void)     //该函数包括唤醒DHT11发送数据给单片机也包括单片机把数据提取
        {  DQ=0;
           delay(21);
           DQ=1;
        Delay10us();
         Delay10us();
               Delay10us();
                   Delay10us();
           DQ=1;      
           if(!DQ)        
           {
           flag=2; 
           while((!DQ)&&flag++);
          flag=2;
           while((DQ)&&flag++);
           COMdata();
           hum=com;
           COMdata();
           COMdata();
           tem=com;
           COMdata();
           COMdata();   //小数位这里我不显示,所以不用读取tem或hum第二次的COMdata()函数获取的数据
                      DQ=1;
           }
        }

    //*********************************LCD显示温湿度数据
    void Display_DTH11()
    {
    uchar xh,xl,yh,yl,vh,vl,uh,ul;
    xh=x/10%10; 
    xl=x%10;
    yh=y/10%10; 
    yl=y%10;
    uh=u/10%10; 
    ul=u%10;
    vh=v/10%10; 
    vl=v%10;
    LCD_Write_String(8,  0, "L");
    LCD_Write_Char(9,  0, ASCII[uh] );
    LCD_Write_Char (10,  0, ASCII[ul] );
    LCD_Write_String(12,  0, "H");
    LCD_Write_Char(13,  0, ASCII[vh] );
    LCD_Write_Char (14,  0, ASCII[vl] );
    LCD_Write_String(8,  1, "L");
    LCD_Write_Char(9,  1, ASCII[xh] );
    LCD_Write_Char (10,  1, ASCII[xl] );
    LCD_Write_String(12,  1, "H");
    LCD_Write_Char(13,  1, ASCII[yh] );
    LCD_Write_Char (14,  1, ASCII[yl] );
    display0[1]=hum/10%10;                               //读hum十位
    display0[0]=hum%10;                                    //个位
    LCD_Write_String(0,  0, table0);
    LCD_Write_Char(4,  0, ASCII[ display0[1] ] ); 
    LCD_Write_Char (5,  0, ASCII[ display0[0] ] );
    LCD_Write_Char (6, 0, ASCII[10] );    //显示在LCD的第几行第几位(这一行是指在第0行,第6位开始显示 ASCII[10] 里面的字符数据,下同),运行结果是显示了“hum:”这四个字符
    display1[1]=tem/10%10;            
    display1[0]=tem%10;                                 
    LCD_Write_String(0,  1, table1);
    LCD_Write_Char (4,  1, ASCII[ display1[1] ] );
    LCD_Write_Char (5,  1, ASCII[ display1[0] ] );
    LCD_Write_Char (6, 1, 0xdf );
    LCD_Write_Char (7, 1, ASCII[11] );     
    }

    //***************原函数结束*************
    //
    void keyscan()
    {
    if(y_tem_inse==0)
    {    delay(10);
    if(y_tem_inse==0)   //这里是消抖,下同
      { y=y+5;
      while(y==55)
       y=50;        
    while(y_tem_inse==0);    
    }
    }
    if(y_tem_duce==0)
     { delay(10);
    if(y_tem_duce==0); 
    {
    y=y-5;     
    while(y==5)         
    y=10;
    while(y_tem_duce==0);
    }
    }
    if(x_tem_inse==0)
    {    delay(10);
    if(x_tem_inse==0)    
    { x=x+5;     
     while(x==55)
     x=50;
    while(x_tem_inse==0);    

    }
    if(x_tem_duce==0)
     {
      delay(10);
    if(x_tem_duce==0);
    {x=x-5;     
    while(x==5)
     x=10;    
    while(x_tem_duce==0);
    }
    }
    if(u_hum_inse==0)
    {    delay(10);    
    if(u_hum_inse==0)    

    u=u+5;      
    while(u==85)
     u=80;        
    while(u_hum_inse==0);    

    }
    if(u_hum_duce==0)
    {  delay(10);    
    if(u_hum_duce==0);
    {
    u=u-5;     
    while(u==25)
      u=30;     
    while(u_hum_duce==0); 
    }
    }
    if(v_hum_inse==0)
    {    delay(10);
    if(v_hum_inse==0)    

    v=v+5;      
    while(v==85)
     v=80;        
    while(v_hum_inse==0);    
    }
     }
     if(v_hum_duce==0)
    {  delay(10);    
    if(v_hum_duce==0);
    {v=v-5;     
    while(v==25)         
    v=20;     
    while(v_hum_duce==0);
    }
    }
    }
    //*******************************上面是按键扫描,以下开始是主函数
    main()
    {

    LCD_Clear();
    x=10,y=50,u=30,v=80;  //温湿度上下限初值,按键函数里可调
    tem=0;   
    hum=0;     //赋初值
    LCD_Init();       
    Delay1000ms();    //DTH11上电一秒后才工作正常
    while(1)
    {
    EA=0;
    keyscan();
    RH();
    if((tem>y)||(tem<x)) n=1;
    else n=0;  //LED或蜂鸣器亮灭判断,下同
    if((hum>v)||(hum<u)) m=1;
    else m=0;
    Display_DTH11();
    Time0_Init();
    Delay1000ms();
    Delay1000ms();
    Delay1000ms();
    }
    }

    展开全文
  • 51单片机液晶时钟

    2019-12-17 16:42:47
    51单片机液晶时钟
  • 目录 1.概述 2.系统总体方案及硬件计 2.1控制系统及所需元件组成 2.2实验原理 3. 程序流程 4. 主要部分电路图 5.扩展 6.心得体会 7.参考文献 附1:源程序代码
  • 单片机控制单色显示屏

    千次阅读 2020-10-27 16:31:27
    由于单片机技术的不断发展和高亮度LED发光管的出现使得大屏幕高亮度LED电子广告成为可能,与传统的霓虹灯广告在显示效果以及可修改性上都有着无法比拟的优势,而且单片机的日益平民化以及LED技术的不断创新,使得...
  • 单片机LCD液晶显示器显示文字代码及仿真
  • 该资源列出了基于单片机控制的点阵显示屏的制作方法以及仿真软件和源代码,很有参考价值。
  • 单片机课程设计——超大屏幕点阵显示(PROTEUS仿真+代码).zip
  • 51单片机:1602液晶显示屏

    千次阅读 2020-06-26 11:48:40
    51单片机:1602液晶显示屏 1602是一种液晶显示器,而液晶显示器通常是根据显示字符的行数、列数来命名的,所以勒,1602的意思便是每行显示16个字符,一共可以显示2行,且只能显示汉字(内置ASCII字符集库,只有并行...
  • 用51芯片设计液晶屏显示时间,C语言代码和图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,912
精华内容 3,164
关键字:

单片机显示屏代码