单片机1602液晶怎样移屏?怎样设置光标闪烁?谁有没有这样的C程序?

谁有就麻烦发一下呀,我的邮箱是1084196043@qq.com.谢谢... 谁有就麻烦发一下呀,我的邮箱是1084196043@qq.com.谢谢 展开
 我来答
机器图灵郭
推荐于2018-03-14
知道答主
回答量:21
采纳率:0%
帮助的人:5.8万
展开全部
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar data a[ ]="xian zai shi ";
sbit key0= P2^0;//功能键,对位进行选择
sbit key1=P2^1;// 加位
sbit key2= P2^2;// 减位
sbit EN= P3^4; //读写段
sbit RS= P3^5; //使能端
uchar miao,fen,shi;
uchar gongleng;//功能键中间变量
uchar g,key0sum;
void xunhuan (uint x)
{
int y,z;
for (y=x;y>0;y--)
for (z=120;z>0;z--);
}

void write_e(uchar e ) //写密命
{
RS=0;
P1=e;
xunhuan(5);
EN=1;//给使能端一个高脉冲, 因为上升源完成指令
xunhuan(5);
EN=0; //芯片停止工作
}
void write_f(uchar f) //写操作
{
RS=1;
P1=f;
xunhuan(5);
EN=1;
xunhuan(5);
EN=0;
}

void write_wei(uchar wei, uchar shu ) //一个显示时间,一个现实在液晶屏那个位置
{
uchar shi,ge;
shi=shu/10; //显示两位数的高位
ge=shu%10; // 显示两位数的高低
write_e(0x80+0x40+wei);
write_f(0x30+shi);
write_f(0x30+ge);
}

void init ()
{
EN=0;//使能端
miao=0;
fen=0;
shi=0;
write_e(0x38);
write_e(0x0c);
write_e(0x06);
write_e(0x01);
//write_e(0x80+0x40);
for (g=0;g<16;g++) //显示现在时间
{
write_f(a[g]);
xunhuan(10);
}

write_e(0x80+0x40+6 ); //将要显示的位置
write_f(':');
xunhuan(5);
write_wei(4,shi);// 时的位置

write_e(0x80+0x40+9 );//将要显示的位置
write_f(':');
xunhuan(5);
write_wei(7,fen);//分的位置

TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void keysan() //按键功能端
{
if(key0==0) //判断功能键的按下
{
xunhuan(20);

if(key0==0)
{
(key0sum)++;
while(!key0) ;

if(key0sum==1)
{
TR0=0 ;//关闭定时器终段位
write_e(0x80+0x40+10 );//移动到秒
write_e(0x0f);//光标闪烁,
}
if(key0sum==2)
{
TR0=0 ;//关闭定时器终段位
write_e(0x80+0x40+7 );//移动到分
write_e(0x0f);//光标闪烁,
}

if(key0sum==3)
{
TR0=0 ;//关闭定时器终段位
write_e(0x80+0x40+4 );//移动到时
write_e(0x0f);//光标闪烁,
}
if(key0sum==4)
{
TR0=1 ;//关闭定时器终段位
key0=0 ;//移动到秒
write_e(0x0c);//取消光标闪烁,
}
}
}

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

if (key0!=0 )//判断功能键是否按下去
{
if(key1==0)
{
xunhuan(20);
if(key1==0) //按键的加位
{
while(!key1);
/*********************///秒
if(key0sum==1) //若功能键按下时一次,说明 光标移到秒
{
miao++;
if(miao==60)

miao=0;
write_wei(10,miao);// 将位和数送到秒
write_e(0x80+0x40+10);
}

/***************************/ //分
if(key0sum==2) //若功能键按下时一次,说明移到分
{
fen++;
if(fen==60)

fen=0;
write_wei(7,fen);// 将位和数送到fen
write_e(0x80+0x40+7);
}

/****************/ //时
if(key0sum==3) //若功能键按下时一次,说明移到分
{
shi++;
if(shi==60)

shi=0;
write_wei(4,shi);// 将位和数送到fen
write_e(0x80+0x40+4);
}
}
}
}
}

void main()
{
uint m;
init();
write_e(0x80);
for(m=0;m<16;m++)
{
write_f(a[m]);
xunhuan(5);
}
while(1)
{

keysan();
}

}

void T0_timer () interrupt 1
{

TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
g++;
if(g==20)
{
g=0;
miao++;

if(miao==60)
{
miao=0;
fen++;

if(fen==60)
{
fen=0;
shi++;

if(shi==24)
{
shi=0;
}
write_wei(4,shi);
}
write_wei(7,fen);
}
write_wei(10,miao);

}

}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kele25500
2011-08-07 · 超过16用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:47.3万
展开全部
已发。请接收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白云海6
2011-08-06
知道答主
回答量:13
采纳率:0%
帮助的人:4.9万
展开全部
看郭天祥的十天学会单片机视频 里面有介绍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式