请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册

扫一扫,访问微社区

搜索
查看: 3595|回复: 4

lcd1602动态滚屏显示程序

[复制链接]

4

主题

12

帖子

57

积分

注册会员

Rank: 2

积分
57
QQ
发表于 2017-4-7 17:22:36 | 显示全部楼层 |阅读模式
效果是“TOM”在第二行从右向左滚动,程序用到的知识点有1.坐标显示, 2.滚动到边缘字符连续问题。分享一下自己的程序!
回复

使用道具 举报

0

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2018-12-12 16:26:11 | 显示全部楼层
#include <reg52.h>

typedef unsigned char u8 ;
typedef unsigned int u16 ;

#define LCD1602_DB P0
sbit LCD1602_RS = P2^6 ;
sbit LCD1602_RW = P2^5 ;
sbit LCD1602_E = P2^7 ;

void delay_n1ms ( u8 time ) ;
void LCD_WriteCmd () ;
void LCD_init () ;
void LCD_WriteDat ( u8 dat ) ;
void LCD_Cursor ( u8 x , u8 y ) ;
void LCD_ShowStr ( u8 x , u8 y , u8 * str , u8 len ) ;
void intertupt_10ms () ;

u8 string[ 35 ] = { 0 } ;

void main ()
{
        u8 i , index , cnt ;
        LCD_init () ;
        intertupt_10ms () ;
        for ( i = 0 ; i < 16 ; i++ )
        {
                string[ i ] = 32 ;
        }
       
        string[ 16 ] = 84 ;
        string[ 17 ] = 79 ;
        string[ 18 ] = 77 ;
       
        for ( i = 19 ; i < 35 ; i++ )
        {
                string[ i ] = 32 ;
        }
       
        while ( 1 )
        {
                if ( TF0 == 1 )
                {
                        TF0 = 0 ;
                        TH0 = ( 65536 - 10000 ) / 256 ;
                        TL0 = ( 65536 - 10000 ) % 256 ;               
                        cnt++ ;
                        if ( cnt == 100 )
                        {
                                cnt = 0 ;
                                LCD_ShowStr ( 0 , 1 , string + index , 16 ) ;
                                index ++ ;
                                if ( index == 19 ) index = 0 ;
                        }
                }
        }
}

void intertupt_10ms ()
{
        TMOD |= 0x01 ;
        TH0 = ( 65536 - 10000 ) / 256 ;
        TL0 = ( 65536 - 10000 ) % 256 ;
        TR0 = 1 ; ET0 = 1 ;
}

void delay_n1ms ( u8 time )
{
        u8 a , b , c , n ;
        for ( n = 0 ; n < time ; n++ )
        {
                for ( c= 1 ; c > 0 ; c-- )
                        for ( b = 142 ; b > 0 ; b-- )
                                for ( a = 2 ; a > 0 ; a-- ) ;
        }
}

void LCD_WriteCmd ( u8 cmd )
{
        LCD1602_DB = cmd ;
        LCD1602_RS = 0 ;
        LCD1602_RW = 0 ;
        LCD1602_E = 1 ;
        delay_n1ms ( 1 ) ;
        LCD1602_E = 0 ;
}

void LCD_init ()
{
        LCD_WriteCmd ( 0x38 ) ;
        LCD_WriteCmd ( 0x0c ) ;
        LCD_WriteCmd ( 0x06 ) ;
        LCD_WriteCmd ( 0x01 ) ;
        LCD_WriteCmd ( 0x80 ) ;
}

void LCD_WriteDat ( u8 dat )
{
        LCD1602_DB = dat ;
        LCD1602_RS = 1 ;
        LCD1602_RW = 0 ;
        LCD1602_E = 1 ;
        delay_n1ms ( 1 ) ;
        LCD1602_E = 0 ;
}

void LCD_Cursor ( u8 x , u8 y )
{
        u8 addr ;
        if ( y == 1 ) addr = 0x40 + x ;
        else addr = 0x00 + x ;
        LCD_WriteCmd ( addr | 0x80 ) ;
}

void LCD_ShowStr ( u8 x , u8 y , u8 *str , u8 len )
{
        LCD_Cursor ( x , y ) ;
        while ( len-- )
        {
                LCD_WriteDat ( *str++ ) ;
        }
}
回复 支持 1 反对 0

使用道具 举报

1

主题

12

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2017-5-7 00:36:38 | 显示全部楼层
楼主你的分享呢?让我们好好学习学习啊
回复 支持 反对

使用道具 举报

19

主题

1230

帖子

4172

积分

论坛元老

Rank: 8Rank: 8

积分
4172
发表于 2017-5-7 11:27:57 | 显示全部楼层
分享在哪儿?我也想看看。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2017-5-10 17:37:06 | 显示全部楼层
说好的分享呢
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|51开发板专区 STM32开发板专区 PLC工控专区 PLC学习机专区 ( 粤ICP备18101765号 )

GMT+8, 2019-3-20 03:49 , Processed in 0.115274 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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