(1) 使用LCM1602液晶做显示器 (2) 使用单片机定时计数器设计时钟。 (3) 可调时功能,有到点报时功能

谁能帮我设计一个单片机的程序的要求如下(1)使用LCM1602液晶做显示器(2)使用单片机定时计数器设计时钟。(3)可调时功能,有到点报时功能再加个原理图谢谢了... 谁能帮我设计一个单片机的程序的 要求如下(1) 使用LCM1602液晶做显示器 (2) 使用单片机定时计数器设计时钟。 (3) 可调时功能,有到点报时功能
再加个原理图 谢谢了
展开
 我来答
黄石佳诚家电维修
推荐于2018-04-13 · TA获得超过1427个赞
知道小有建树答主
回答量:1559
采纳率:93%
帮助的人:588万
展开全部

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;


sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;

uchar Display_Buffer[8];
uchar Count,hour=12,min=12,sec=12;
bit flag,H_or_M;

 

void _delay_ms(unsigned int x)
{
 unsigned char i;
 while(x--)
 {
  for(i=0;i<120;i++);
 }
}

uchar LCD_Busy(void)//测忙
{
 uchar LCD_Status;//返回值变量
 LCD_RS=0;//读取状态
 LCD_RW=1;
 LCD_EN=1;
 _nop_();_nop_();_nop_();_nop_();
 LCD_Status=P0;
 LCD_EN=0;
 return LCD_Status;
}

void LCD_Write_Command(uchar cmd)//写指令
{
 while((LCD_Busy()&0x80)==0x80);//测忙
 LCD_RS=0;//
 LCD_RW=0;
 LCD_EN=0;
 P0=cmd;
 LCD_EN=1;
 _nop_();_nop_();
 LCD_EN=0;
 _nop_();_nop_();
}

void LCD_Write_Data(uchar dat)//写数据
{
 while((LCD_Busy()&0x80)==0x80);
 LCD_RS=1;
 LCD_RW=0;
 LCD_EN=0;
 P0=dat;
 LCD_EN=1;
 _nop_();_nop_();
 LCD_EN=0;
 _nop_();_nop_();
}

void Init_LCD(void)//液晶初始化
{
 _delay_ms(15);
 LCD_Write_Command(0x38);
 _delay_ms(5);
 LCD_Write_Command(0x06);
 _delay_ms(5);
 LCD_Write_Command(0x0c);
 _delay_ms(5);
 LCD_Write_Command(0x01);
 _delay_ms(5);
 
}

void LCD_POS(uchar pos)//字符显示位置
{
 LCD_Write_Command(0x80|pos);
}

void Show_String(uchar *str)//显示字符串
{
 while(*str!='\0')
 LCD_Write_Data(*str++);
}

/////lcd1602液晶显示//////

void Display_Time(uchar Hour,uchar Min,uchar Sec)
{
 Display_Buffer[0]=Hour/10+'0';//小时十位
 Display_Buffer[1]=Hour%10+'0';//小时个位
 Display_Buffer[2]=':';//显示:号
 Display_Buffer[3]=Min/10+'0';//显示分钟十位
 Display_Buffer[4]=Min%10+'0';//显示分钟个位
 Display_Buffer[5]=':';//显示:号
 Display_Buffer[6]=Sec/10+'0';//显示秒十位
 Display_Buffer[7]=Sec%10+'0';//显示秒个位
 LCD_POS(0x40);//显示在液晶第1行第0列
 Show_String(Display_Buffer);
}
/////按键处理//////
void Set_time(void)
{
 flag=0;
 if(key1==0||key2==0||key3==0)//若key1,key2,key3其中有键按下,则为真
 {
  TR0=0;//定时器0停止
  flag=1;//按键标志位为真
 }
 while(flag)//判断那一个按键按下
 {
  if(key1==0)//判断key1是否按下
  {
   while(!key1);//等待释放
   H_or_M=!H_or_M;//选择是修改时还是分钟
  }
  else if(key2==0)//判断key2是否被按下
  {
   while(!key2);//等待释放
   if(H_or_M)//若H_OR_M为真,则修改小时
   {
    if(++hour==24)//若小时=24,则小时=0 
     hour=0;//小时加1
   }
   else//否则修改分钟
   {
    if(++min==60)//若分钟等于60,则分钟等于0
     min=0;//分钟加1
   }
  }
  else if(key3==0)//判断key3是否被按下
  {
   while(!key3);//等待释放
   if(H_or_M)//若H_OR_M为真,则修改小时
   {
    if(--hour==0xff) //小时减1,若小时等于-1,则小时等于23
     hour=23;
   }
   else//否则修改分钟
   {
    if(--min==0xff)//分钟减1,若分钟等于-1,则分钟等于59
     min=59;
   }
  }
  else if(key4==0)//判断key4是否被按下
  {
   while(!key4);//等待释放
   flag=0;//按键标志清零
   TR0=1;//定时器0启动
  }
  Display_Time(hour,min,sec);//传H,M,S值显示到液晶
 }
}

void timer0_init(void)//定时器0初始化
{
 TMOD=0x01;//定时器0,方式1
 ET0=1;//
 EA=1;//总中断允许
 TR0=1;//启动定时器0
 TH0=(65535-50000)/256;//装高8位初值
 TL0=(65535-50000)%256;//装低8位初值
}
void main(void)//主函数

 P1=0xff;//端口初始化
 P3=0xff;
 Init_LCD();//液晶初始化
 timer0_init();//定时器0初始化
 while(1)//无限循环
 {
  Display_Time(hour,min,sec);//液晶显示时间
  //_delay_ms(500);//延时
  Set_time();//时间调整
 }
}

void timer0() interrupt 1//定时器0中断
{
 TH0=(65535-50000)/256;//重装定时器0高8位
 TL0=(65535-50000)%256;//重装定时器0低8位
 Count++;//计数加1
 if(Count==20)//如果COUNT等于20
 {
  Count=0;//计数清零
  sec++;//秒加1
  if(sec==60)//判断秒是否等于60
  {
   sec=0;//秒清零
   min++;//分钟加1
   if(min==60)//判断分钟是否等于60
   {
    min=0;//若等于60,则清零分钟
    hour++;//小时加1
    if(hour==24)//判断小时是否等于24
    {
     hour=0;//若小时等于24,则清零小时,分钟,秒
     min=0;
     sec=0;
    }
   }
  }
 }
}

以上是C语言程序,原理图如下:

更多追问追答
追问
程序还有错误  不知道怎么搞的 老提示错误丫
追答
你给个邮箱,给你发过去!
sdlylshl9
2019-08-11 · TA获得超过1814个赞
知道小有建树答主
回答量:779
采纳率:75%
帮助的人:249万
展开全部
这是个工程性的东西,需要的时间比较多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我本无心dj
2012-12-09 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:80%
帮助的人:1.1亿
展开全部
你好
这个设计太过复杂,需要专业人士才可以做到。而且需要耗费部分精力,百度知道只是一个知识分享平台,所以在这里请求网友帮忙做设计方案,可能没办法得到你满意的结果。
建议还是咨询下你身边的一些有经验的朋友,或同事帮你设计,比较实际。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式