51单片机lcd1602液晶屏介绍 0x0c和0x06是什么意思,为什么这么表示????

708被浏览75,609分享邀请回答int main(void) //一个main函数 搞定
P0 = 0xxx;
linux:驱动程序:
#include&linux/init.h&
#include&linux/module.h&
#include&linux/fs.h&
//file_operatios
#include&linux/device.h& //class_create/device_create
#include&linux/slab.h&
#include&asm/io.h&
#include&asm/uaccess.h&
#include"led.h"
struct s5pv210_device *s5pv210_dev;
volatile unsigned long *gpc0con = NULL;
volatile unsigned long *gpc0dat = NULL;
static int led_open(struct inode *inode, struct file *file)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/
*gpc0con &= ~((0xf&&12)|(0xf&&16));
*gpc0con |= ((0x1&&12)|(0x1&&16));
static int led_close(struct inode *inode, struct file *file)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
//iounmap(S5PV210_PA_GPC0CON);
static ssize_t led_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
//write(fd, &val, 4)
static ssize_t led_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
unsigned int val;
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
/*获取用户空间数据*/
ret = copy_from_user(&val,buf,count);
printk(KERN_ERR"copy data from user failed!\n");
return -ENODATA;
printk(KERN_INFO"copy data from user: val=%d\n",val);
*gpc0dat |= ((0x1&&3)|(0x1&&4));
*gpc0dat &= ~((0x1&&3)|(0x1&&4));
return ret?0:count;
static struct file_operations led_fops={
.owner = THIS_MODULE,
.open = led_open,
.read = led_read,
.write = led_write,
.release = led_close,
static int __init led_init(void)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
s5pv210_dev = kmalloc(sizeof(struct s5pv210_device),GFP_KERNEL);
if(s5pv210_dev==NULL)
printk(KERN_INFO"no memory malloc for s5pv210_dev!\n");
return -ENOMEM;
led_major = register_chrdev(0,"led",&led_fops);
if(led_major&0)
printk(KERN_INFO"register major failed!\n");
ret = -EINVAL;
goto err1;
/*创建设备文件*/
s5pv210_dev-&led_class = class_create(THIS_MODULE,"led_class");
if (IS_ERR(s5pv210_dev-&led_class)) {
printk(KERN_ERR "class_create() failed for led_class\n");
ret = -EINVAL;
goto err2;
s5pv210_dev-&led_device = device_create(s5pv210_dev-&led_class,NULL,MKDEV(led_major,0),NULL,"led");
if (IS_ERR(s5pv210_dev-&led_device)) {
printk(KERN_ERR "device_create failed for led_device\n");
ret = -ENODEV;
goto err3;
/*将物理地址映射为虚拟地址*/
gpc0con = ioremap(S5PV210_PA_GPC0CON,8);
if(gpc0con==NULL)
printk(KERN_INFO"ioremap failed!\n");
ret = -ENOMEM;
goto err4;
gpc0dat = gpc0con + 1;
device_destroy(s5pv210_dev-&led_class,MKDEV(led_major,0));
class_destroy(s5pv210_dev-&led_class);
unregister_chrdev(led_major,"led");
kfree(s5pv210_dev);
return ret;
static void __exit led_exit(void)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
unregister_chrdev(led_major,"led");
device_destroy(s5pv210_dev-&led_class,MKDEV(led_major,0));
class_destroy(s5pv210_dev-&led_class);
iounmap(gpc0con);
kfree(s5pv210_dev);
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
应用程序:#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &stdio.h&
#include &errno.h&
#include &stdlib.h&
#include &unistd.h&
#include &string.h&
** ./led_test on
** ./led_test off
int main(int argc, char **argv)
int val =0;
fd = open("/dev/led", O_RDWR);
perror("open failed!\n");
if(strcmp(argv[1], "on")==0)
if(write(fd, &val, 4)!=4)
perror("write failed!\n");
close(fd);
android:不知道大家清不清楚android与linux之间的关系。android是基于linux内核的,linux操作系统的5大组件:驱动,内存管理,文件系统,进程管理,网络套接字。android是基于linux kernel上的,大家平时只看到了app。app是java语言的,其实每运行一个java应用程序,实际上是fork一个linux应用程序。android四大组件,activity,service,Broadcast Receiver,Content Provider。这是android的主要框架,java应用开发是基于这开发的。android平台是基于linux 内核的。在linux运行之后才建立起java世界。直接上代码:上面的linux的驱动在android是一样的,适用于android。驱动ok之后是应用层了,也就是应用程序。我下面就是最直接的应用,不包含任何android框架性的东西,大家可以直接看到,应用app-&jni-&linux驱动这三层调用关系。下面是jni代码是c++;#define LOG_TAG "led-jni-log"
#include &utils/Log.h&
#include "jni.h"
#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &stdio.h&
#include &errno.h&
#include &unistd.h&
#include &stdlib.h&
static int fd = -1;
jint open_led(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
fd = open("/dev/led1", O_RDWR);
if(fd & 0)
LOGE("open : %s\n", strerror(errno));
return -1;
jint led_on(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
int val = 1;
jint ret = 0;
ret = write(fd, &val, 4);
if(ret != 4)
LOGE("write : %s\n", strerror(errno));
return -1;
jint led_off(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
int val = 0;
jint ret = 0;
ret = write(fd, &val, 4);
if(ret != 4)
LOGE("write : %s\n", strerror(errno));
return -1;
jint close_led(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
if(fd & 0)
close(fd);
static JNINativeMethod myMethods[] ={
{"openDev", "()I", (void *)open_led},
{"onDev", "()I", (void *)led_on},
{"offDev", "()I", (void *)led_off},
{"closeDev", "()I", (void *)close_led},
jint JNI_OnLoad(JavaVM * vm, void * reserved)
JNIEnv *env = NULL;
jint ret = -1;
ret = vm-&GetEnv((void **)&env, JNI_VERSION_1_4);
if(ret & 0)
LOGE("GetEnv error\n");
return -1;
jclass myclz = env-&FindClass("com/ledtest/LedActivity");
if(myclz == NULL)
LOGE("FindClass error\n");
return -1;
ret = env-&RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));
if(ret & 0)
LOGE("RegisterNatives error\n");
return -1;
return JNI_VERSION_1_4;
然后是java app:package com.ledtest;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class LedActivity extends Activity {
final String TAG = "LedActivity";
public Button btn_on = null;
public Button btn_off = null;
public void init() {
btn_on = (Button) this.findViewById(R.id.btn1);
btn_on.setOnClickListener(clickListener);
btn_off = (Button) this.findViewById(R.id.btn2);
btn_off.setOnClickListener(clickListener);
OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Log.d(TAG, "led on in app");
case R.id.btn2:
Log.d(TAG, "led off in app");
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_led);
openDev();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_led, menu);
return true;
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
closeDev();
System.loadLibrary("led_jni");
public native int openDev();
public native int onDev();
public native int offDev();
public native int closeDev();
框架是这样的:最上层是java ,点开app,点击一下一个button,点亮了LED,调用onDev();onDev调用c++的led_on,然后led_on是调用驱动的led_write,明白不?这样说吧:linux 驱动是最下层的,驱动嘛。然后是c++层,c++包装一下是给java调用的,然后到java层。下面是android比价经典的一张框架图。linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。51267 条评论分享收藏感谢收起22240 条评论分享收藏感谢收起查看: 2523|回复: 0
51单片机1602液晶屏显示温度程序
51单片机1602液晶屏显示温度程序
0.png (58 KB, 下载次数: 15)
16:13 上传
单片机源程序:
/*********************************************************************************
* 【编写时间】: 日
* 【作& & 者】: 清翔电子:03
* 【版& & 本】: 1.0
* 【实验平台】: QX-MCS51 单片机开发板
* 【外部晶振】: 11.0592mhz& & & &
* 【主控芯片】: STC89C52RC
* 【编译环境】: Keil μVisio4& & & &
* 【程序功能】: 1602液晶显示温度& & & & & & & & & & & && & & & & & & & & & & & & && && && && & & & & & & & & & & & & && &&&
* 【使用说明】: 1.使用1602液晶前先拔掉数码管J6跳帽,数码管与液晶不能共用
& && && && && &&&2.将1602液晶接到L2排母上,液晶面向开发板外部
& & & & & & & & & & & & & & & &&&3.若程序烧写完成后,1602液晶无显示,请调节开发板右下方的电位器RV1& & & &
& & & & & & & & & & & & & & & &&&4.注意18B20插接反向,弧形面向开发板外!
**********************************************************************************/
#include &reg52.H&
#include &intrins.H&
#include &math.H&
#define uchar unsigned char
#define uint unsigned int
sbit RS = P0^7;& &
sbit LCDEN = P0^5;
sbit rw=P0^6;
sbit&&BEEP=P3^6;
/*********************************************************
500us延时函数
晶振:11.0592MHz
*********************************************************/
void delay500(void)
{
&&uchar&&i;
&&for(i=230;i&0;i--);
}
void delayUs()
{
& & _nop_();
}
void delayMs(uint a)
{
& & uint i,
& & for(i = i & 0; i--)
& && &&&for(j = 100; j & 0; j--);
void writeComm(uchar comm)
{
& &&&RS = 0;& &
& & P2 =
& & LCDEN = 1;
& &&&delayUs();
& & LCDEN = 0;
& & delayMs(1);
}
//写数据:RS=1, RW=0;
void writeData(uchar dat)
{
& &&&RS = 1;
& &&&P2 =
& &&&LCDEN = 1;
& & delayUs();
& & LCDEN = 0;
& & delayMs(1);
void init()
{
& &rw=0;
& &writeComm(0x38);
& &writeComm(0x0c);
& & writeComm(0x06);
& & writeComm(0x01);
void writeString(uchar * str, uchar length)
{
& &&&
& & for(i = 0; i & i++)
& & {
& && && &writeData(str[i]);
& &&&}
/**//*****************************DS18B20*******************************/
sbit ds = P1^0;
void dsInit()
& &&&
& & ds = 0;
& & i = 100;&&
& &&&while(i&0) i--;
& & ds = 1;& &
& & i = 4;
& &&&while(i&0) i--;
void dsWait()
{
& && &
& && &while(ds);&&
& && &while(~ds);
& && &i = 4;
& && &while(i & 0) i--;
}
bit readBit()
{
& &
& &
& & ds = 0;
& & i++;& &
& & ds = 1;
& &i++; i++;&&
& & b =
& & i = 8;
& & while(i&0) i--;
& &
}
unsigned char readByte()
{
& &
& & unsigned char j,
& &dat = 0;
& & for(i=0; i&8; i++)
& & {
& && &&&j = readBit();
& && &
& && &&&dat = (j && 7) | (dat && 1);
& & }
& &
}
void writeByte(unsigned char dat)
{
& &
& &
& &
& & for(j = 0; j & 8; j++)
& & {
& && &&&b = dat & 0x01;
& && &&&dat &&= 1;
& &
& && &&&if(b)& &
& && &&&{
& && && &&&ds = 0;& && && & i++; i++;&&
& && && && &ds = 1;& &
& && && && &i = 8; while(i&0) i--;&&
& && &&&}
& && &&&else&&
& && &&&{
& && && && &ds = 0;
& && && & i = 8; while(i&0) i--;&&
& && && && &ds = 1;
& && && &&&i++; i++;
& && &&&}
& &}
}
void sendChangeCmd()
{
& & dsInit();& &
& & dsWait();& &
& & delayMs(1);& &
& & writeByte(0xcc);
& & writeByte(0x44);
}
void sendReadCmd()
{
& & dsInit();
& & dsWait();
& & delayMs(1);
& & writeByte(0xcc);
& & writeByte(0xbe);
int getTmpValue()
{
& & u
& &
& &
& & unsigned char low,
& & sendReadCmd();
& &
& & low = readByte();
& & high = readByte();
& &
& & tmpvalue =
& & tmpvalue &&= 8;
& & tmpvalue |=
& & value =
& &
&&\
& & t = value * 0.0625;
& & \
& & value = t * 100 + (value & 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
& &
}
void display(int v)
{
& &
& & unsigned char datas[] = {0, 0, 0, 0, 0};
& & unsigned int tmp = abs(v);
& & datas[0] = tmp / 10000;
& & datas[1] = tmp % 10000 / 1000;
& & datas[2] = tmp % 1000 / 100;
& & datas[3] = tmp % 100 / 10;
& & datas[4] = tmp % 10;
& & writeComm(0xc0+3);
& & if(v & 0)
& & {
& && &&&writeString(&- &, 2);
& &}
& & else
& & {
& && & writeString(&+ &, 2);
& & }
& & if(datas[0] != 0)
& & {
& && &&&writeData('0'+datas[0]);
& & }
& & for(count = 1; count != 5; count++)
& & {
& && &&&writeData('0'+datas[count]);
& && &&&if(count == 2)
& && &&&{
& && && && &writeData('.');
& && &&&}
& & }
}
/**//*****************************DS18B20*******************************/
void main()
{
& & uchar table[] = & xianzaiwendu:&&&;
& & & &//i储存转换后的温度值
& & & &
& & sendChangeCmd();
& & init();
& & writeComm(0x80);
& & writeString(table, 16);
& & while(1)
& & {
& && &&&delayMs(1000); //温度转换时间需要750ms以上
& && &&&writeComm(0xc0);
& & & & & & & & i = getTmpValue();
& & & & & & & & if(i & 2300)
& & & & & & & & {
& & & & & & & & & & & & for(j=200;j&0;j--)
& & & & & & & & & & & & {
& & & & & & & &&&& & & &&&& & & & BEEP=~BEEP;& && & //输出频率1KHz
& & & & & & & && && & & & & & & & delay500();& && & //延时500us
& & & & & & & & & & & & }
& & & &
& & & & & & & & & & & & for(j=200;j&0;j--)
& & & & & & & & & & & & {
& & & & & & & &&&& & & & & & & &&&BEEP=~BEEP;& && & //输出频率500Hz
& & & & & & & &&&& & & & & & & &&&delay500();& && & //延时1ms
& & & & & & & &&&& & & & & & & &&&delay500();
& & & & & & & & & & & & }& & & &
& & & & & & & & }
& && &&&display(i);
& && &&&sendChangeCmd();
& & }
}
复制代码
(27.34 KB, 下载次数: 18)
10:58 上传
点击文件名下载附件
下载积分: 黑币 -5
Powered by查看: 10086|回复: 38
发个适合新手的GPS制作。51单片机+串口GPS模块+1602液晶
用51单片机解析串口GPS模块发来的信息,在1602液晶显示 。电路图就不上了,用51单片机机的&&TXD口接GPS模块的RXD口。程序略做修改便可移植到其他的系统上。
(原文件名:照片384.jpg)
& &这程序是结合网络资料,自己略加修改。这是代码。 (原文件名:小板,单片机2可显最大速度.rar)
楼主给下具体的电路图吧~
正需要,谢谢
我也来mark下
嗯。支持。
最近想做一个GPS的东东,楼主可以发我一套资料吗?764731956
@qq.com
程序文件一:main.c
#include&config.h&
#include&reg51.h&
#include &lcd1602.h&
#include &gps.h&
void main()
& & & & lcd_init();
& & & & Lcd_Display(1 ,0, &Lat :&);
& & & & Lcd_Display(2 ,0, &Lon :&);
& & & & Uart_Init();
& & & & while(1)
& & & && &if(gps_receive() == 1)
& & & && && &select();& & & &
程序文件二:gps.c
#include&reg51.h&
#include &config.h&
#include &lcd1602.h&
uchar gpsdat[36] =& & ;
uchar dispbuf[10] = &no signal&;
void Uart_Init()
& & & && & TMOD=0x20;& && && &&&//初始化串口
& & & && & TL1 =0
& & & && & TH1 =0& && && &&&//4800波特率
& & & && & SCON=0x50;& && && & //工作方式1:八位异步通信,允许接收
& & & && & PCON=0x00;& && && && &//波特率加倍关
& & & && & TR1=1;& && && && &&&//开启启动定时器1
& & & &&&}
&&void shift1_data()
& & & && &uchar temp_
& & & & & & & & temp_dat = dispbuf[3];
& & & & & & & & dispbuf[3] = dispbuf[4];
& & & & & & & & dispbuf[4] = temp_
& & & & & & & & temp_dat = dispbuf[2];
& & & & & & & & dispbuf[2] = dispbuf[3];
& & & & & & & & dispbuf[3] = temp_
& & & && &}& & & &
void shift2_data()
& & & && &&&uchar temp_
& & & & & & & & temp_dat = dispbuf[4];
& & & & & & & & dispbuf[4] = dispbuf[5];
& & & & & & & & dispbuf[5] = temp_
& & & & & & & & temp_dat = dispbuf[3];
& & & & & & & & dispbuf[3] = dispbuf[4];
& & & & & & & & dispbuf[4] = temp_
& & & && &}& & & &
void select()
& & & && & uchar sb = 0;
& & & && & uchar fk= 0;
& & & && & uchar *pda,*
& & & && & pda =
& & & && & pjd =
& & & && &
& & & && &&&for(fk=0;fk&10;fk++)& & & && &//经度数据挑选
& & & && && &{
& & & & & & & && & *pjd=*(pda+23+fk);
& & & & & & & && & pjd++;
& & & & & & & &&&}
& & & & & & & &&&*pjd = '\0';
& & & & & & & &&&shift2_data( );& & & && &
& && & Lcd_Display(2 ,6, dispbuf);
& & & &&&pjd =
& & & && &for(sb=0;sb&9;sb++)& & & && &//维度数据挑选
& & & && && &
& & & & & & & && && & {
& & & & & & & & & & & && &&&*pjd=*(pda+11+sb);
& & & & & & & & & & & & & & & & pjd++;
& & & & & & & & & & & && &}
& & & & & & & && && &*pjd='\0';
& & & & & & & & & & & & shift1_data( );
& & & &&&& & & &&&Lcd_Display(1 ,6,&&dispbuf);& & & &
& & & &&&}& & & && &
& & & && &
int&&gps_receive()
& & & && & uchar *
& & & && & uchar rec_con=0; //接收数据计数
& & & & pdat =
& & & && & while(!RI);
& & & && && &&&RI = 0;
& & & && & if(SBUF != '$')
& & & && && &&&return 0;& & & && && &&&
& & & && & while(!RI);
& & & && && && &RI = 0;
& & & && & if(SBUF != 'G')
& & & && && && &return 0;
& & & & & & & & while(!RI);
& & & & & & & &&&RI = 0;
& & & & & & & & if(SBUF != 'P')
& & & & & & & && & return 0;
& & & && && && & while(!RI);
& & & & & & & &&&& & & && &RI = 0;
& & & & & & & & if(SBUF != 'G')
& & & & & & & && && & return 0;
& & & & & & & & while(!RI);
& & & & & & & && && & RI = 0;
& & & & & & & & if(SBUF !='G')
& & & & & & & && && & return 0;
& & & & & & & & while(!RI);
& & & & & & & && && &&&RI = 0;
& & & & & & & & if(SBUF != 'A')
& & & & & & & && && & return 0;
& & & & & & & && && &for(rec_con=0;rec_con&35;rec_con++)
& & & & & & & && &{
& & & & & & & && &&&while(!RI);
& & & & & & & & & & & & RI = 0;
& & & & & & & &&&& & & & *pdat= SBUF;
& & & & & & & & & & & & pdat++& & & & ;
& & & & & & & & & & & & & & & && &}& & & && &
& & & & & & & && &
& & & & & & & && & *pdat= '\0';&&
& & & & & & & && &return 1;& &
& & & && &
程序文件三:lcd1602.c
#include&reg51.h&
#include&config.h&
sbit rs=P3^5;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
void lcd_delay(uint16 x)
& & & & uint16 a,b;
& & & & for(a=x;a&0;a--)
& & & & & & & & for(b=3;b&0;b--);
void write_com(uchar com)
& & & & P0=
& & & & rs=0;
& & & & lcden=0;
& & & & lcd_delay(10);
& & & & lcden=1;
& & & & lcd_delay(10);
& & & & lcden=0;
void write_date(uchar date)
& & & & P0=
& & & & rs=1;
& & & & lcden=0;
& & & & lcd_delay(10);
& & & & lcden=1;
& & & & lcd_delay(10);
& & & & lcden=0;
void lcd_init()
& & & & dula=0;
& & & & wela=0;
& & & & write_com(0x38);
& & & & lcd_delay(20);
& & & & write_com(0x0f);
& & & & lcd_delay(20);
& & & & write_com(0x06);
& & & & lcd_delay(20);
& & & & write_com(0x01);
& & & & lcd_delay(20);& & & &
void Lcd_Display(uchar line ,uchar position,uchar *buf)
& & & && & & & & & uint8 a=0;
& & & & & & & & uint8 counter =0;
& & & && &&&if(line == 1)
& & & & & & & && & {
& & & & & & & && && &write_com(0x80+position);
& & & & & & & & & & & &&&//lcd_delay(20);
& & & & & & & && & }
& & & & & & & & else
& & & & & & & && & {
& & & & & & & && && &write_com(0xc0+position);
& & & & & & & && & }
& && &&&lcd_delay(20);
& & & & & & & & while( ((*buf) != '\0'))
& & & & & & & & & & & &&&{
& & & & & & & & & & & & & & & & write_date(*buf);
& & & && && && && & lcd_delay(20);
& & & & & & & & & & & && &&&buf++;
& & & & & & & & & & & & & & & & counter++;& & & & & & & &
& & & & & & & & & & & & }&&
& & & &&&}
void Lcd_Display(uchar line ,uchar position,uchar *buf);
帮我把这个程序改成只显示时分秒,急用,非常感谢
赞!!很牛啊!
这个好呀 自己也可以弄弄了
最近想做一个GPS的东东,楼主可以发我一套资料吗?@qq.com
51+1602&&GPS& && &Mark
最近在搞GPS,楼主能发我一份资料吗,
这个不错,正好想做个GPS测速仪,哈哈...谢了LZ
market& &&&
真是学习的好东西
mark,这个好,回家到电脑上下载来玩玩,正好配件都有,学习学习,最近刚开始学汇编。
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
有何用处呀?
正好有个1602,呵呵,谢谢楼主,缺个GPS准备去买
mark& && && && && &
马克!好资料
gps啥型号啊
我的gps模块链接电脑的时候 只有波特率设为9600时才能显示数据,前他波特率显示乱码,用楼主的程序写入单片机后链接gps模块,开机显示没有gps模块,是不是因为波特率不对呢。我用的是 89c52 11.0592
正好配件都有,学习学习
一直很好奇,有时间做一做!
好东东,学习
mark一下,先
阿莫电子论坛, 原"中国电子开发网"
, 原www.ourdev.cn, 原www.ouravr.com为什么lcd1602显示器的行首地址为0x80和0x0c? 求解_百度知道
为什么lcd1602显示器的行首地址为0x80和0x0c? 求解
我有更好的答案
1602的首地址指令是0X80,写完后。,只要在前面设置自动加一指令,地址会自动加一
采纳率:50%
为您推荐:
其他类似问题
lcd1602的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机温度报警LCD1602显示c语言程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机温度报警LCD1602显示c语言程序
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 1602液晶屏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信