资源简介
基于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
相关资源
- [免费]msp430f149控制PS2键盘并用1602显示
- ADC0809数字电压表 LCD1602显示 汇编程序
- LCD1602显示程序
- DS18B20-液晶1602显示温度和控制(代码
- STM32+ZE08-CH2O甲醛传感器+LCD1602显示.r
- STM32f103电压采样并用LCD1602显示
- STM32-串口能显示-超声波测距SR04 - LC
- STM32F407VET6_SMART_LCD1602显示
- 汇编程序测控51单片机超声波测距16
- 51单片机时钟电路LCD1602显示完整源码
- 基于stm32的lcd1602显示C程序源码
- fpga驱动1602显示字符
- STM32,超声波测距模块HC_SR04,1602显示
- 基于51单片机的超声波测距LCD1602显示
- STM32-LCD1602显示proteus仿真实验
- STM32F103 驱动四路MAX6675 采集温度 LC
- 电子秤1602显示
- 基于DS18B20传感器的数字温度监控系统
- rc522之51单片机1602显示以及上位机
- STM32 1602显示AD采集的电压值
- 基于51单片机的DS18B20温度控制1602显示
- 基于STM32的LCD1602显示
- LCD1602显示 基于nios ii
- 51单片机ADC0804程序1602显示带仿真
- 基于51单片机和DS18B20的温度控制器带
- 4位电子密码锁 lcd1602显示
- 基于51单片机LCD1602显示时钟温度报警
- MSP430单片机DS18B20测温、LCD1602显示、报
- 课程设计题十二:电子密码锁.zip
- 超声波测距仪1602显示.zip
评论
共有 条评论