资源简介
基于51单片机的1602显示及光标移动,光标移动位的数据修改
代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
#define Data P0 //数据传输口
sbit RS = P2 ^ 7 ; //寄存器选择输入
sbit RW = P2 ^ 6 ; //液晶读写控制
sbit EN = P2 ^ 5 ; //使能端
sbit k1 = P3 ^ 2 ; //进入设置
sbit k2 = P3 ^ 3 ; //向右移位
sbit k3 = P1 ^ 1 ; //+ 1
sbit k4 = P1 ^ 0 ; //确认
uchar temp[16] = { 1 5 } ; //数组
/***********LCD1602**************/
void delay(uchar ms)
{
uchar i ;
while(ms--)
for( i = 0 ; i < 250 ; i ++ ) ;
}
void lcd_busy() //检测忙信号
{
RS = 0 ;
RW = 1 ;
EN = 1 ;
while(Data & 0x80) ;
EN = 0 ;
}
void write_com(uchar com) //写指令
{
lcd_busy() ;
RS = 0 ;
RW = 0 ;
Data = com ;
EN = 1 ;
EN = 0 ;
}
void write_data(uchar dat) //写字节
{
lcd_busy() ;
RS = 1 ;
RW = 0 ;
Data = dat ;
EN = 1 ;
EN = 0 ;
}
void LCD_Init() //初始化
{
write_com(0x38) ; //写显示指令
delay(1) ;
write_com(0x08) ; //显示、光标、闪烁关闭
delay(1) ;
write_com(0x01) ; //清屏指令
delay(1) ;
write_com(0x06) ; //显示光标移动、画面移动方式(AC自增1)
delay(1) ;
write_com(0x0c) ; //开显示,关闭光标
delay(1) ;
}
void display(uchar addr uchar dat) //往某一地址,显示一字节
{
delay(10) ; //延时,否则没有显示
write_com(addr | 0x80) ; //写地址
write_data(dat + 0x30) ; //写数据
}
void key()
{
uint i j x ;
if( !k1 )
{
for(j = 0 ; ; j ++ ) //进入for循环(无结束条件)
{
write_com(0x80 + x ) ; //指定光标位置
write_com(0x0f) ; //光标闪烁指令
if( !k2 )
{
while( !k2 ) ;
if ( x > 14 ) x = 0 ; //光标的位数大于14,光标归位
else x ++ ; //否则光标继续右移
delay(10) ; //延时,否则光标会连续跳几个位
}
if( !k3 )
{
while( !k3 ) ;
temp[x] ++ ; //temp[]数组中的第(x+1)个数据自增1
if ( temp[x] > 9 ) temp[x] = 0 ; //若数据大于9,则清零
for( i = 0 ; i < 16 ; i++ ) //显示动态改动数据
display(i temp[i]) ;
}
//display(0x41 x ) ; //显示光标位数
if( !k4 ) //跳出for循环
{
x = 0 ; //光标归位
break ;
}
}
//write_com(0x1c) ; //光标与字符向右移动
//write_com(0x18) ; //光标与字符向左移动
}
}
void main()
{
int i ;
LCD_Init() ; //初始化1602
while(1)
{
key(); //扫描按键程序
for( i = 0 ; i < 16 ;i++ ) //显示temp[]数组
display(i temp[i]) ;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-27 12:00 Move and Change\
文件 5613 2013-10-27 12:00 Move and Change\M_C
文件 2431 2013-10-27 12:00 Move and Change\M_C.c
文件 1362 2013-10-27 12:00 Move and Change\M_C.hex
文件 38 2013-10-27 12:00 Move and Change\M_C.lnp
文件 6590 2013-10-27 12:00 Move and Change\M_C.LST
文件 9400 2013-10-27 12:00 Move and Change\M_C.M51
文件 6361 2013-10-27 12:00 Move and Change\M_C.OBJ
文件 1021 2013-10-27 12:00 Move and Change\M_C.Opt
文件 8589 2013-10-27 12:00 Move and Change\M_C.plg
文件 2079 2013-10-26 11:58 Move and Change\M_C.Uv2
文件 1020 2013-10-27 09:56 Move and Change\M_C_Opt.Bak
文件 2046 2013-10-26 11:18 Move and Change\M_C_Uv2.Bak
相关资源
- 4×4矩阵键盘键值LCD1602显示汇编语言
- 基于单片机的温湿度1602显示
- 51单片机读取DS18b20数据加1602显示+pr
- 51单片机驱动K型热电偶数字转换器M
- 51单片机Protues,仿真DS18b20温度传感器
- 单片机电子密码锁,1602显示,密码可
- DS1302 LCD1602显示 protues仿真
- LCD1602显示代码,verilog HDL编写。
- ds1302时钟、温度、LCD1602显示,按键设
- DHT11 温湿度传感器1602显示 可用程序
- 用FPGA实现LCD1602显示程序
- 51单片机串口通信+1602显示字符串
- Verlog 驱动TLC549在LCD1602显示
- SHT10 SHT20 SHT21温湿度单片机89C52 1602显
- 基于51单片机的超声波测距程序LCD16
- 基于VHDL的LCD1602显示程序,电路设计,
- 1602显示汉字C51
- DS1302时钟LCD1602显示
- 51电压表 1602显示附proteus仿真
- 光电测速及LCD1602显示
- lM016L/1602显示汉字(lcd1602手册+keil51
- 矩阵键盘4*4+1602显示+protues仿真
- LCD1602显示万年历程序
- 51单片机频率计1602显示
- DS1302时钟芯片做的LCD1602显示时钟51单
评论
共有 条评论