打印

一个很困扰我的问题

[复制链接]
1997|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Name_006|  楼主 | 2010-3-15 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/////////////////////////////////
//功能描述:键盘扫描程序
//单 片 机:51系类单片机
//编 写:ldl
//日 期:2010
//版 本:1.0
/////////////////////////////////
#i nclude<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" the time now";
uchar code table1[]="    00:00:00";
uchar num,counter,sec,min,hour;
sbit lcd_en=P3^4;
sbit lcd_rs=P3^5;
sbit duan=P2^6;
sbit wei=P2^7;

write_time(uchar add,uchar num0);
/////////////////////////////////
//函数功能:延时函数
//输入函数:
//返回函数:
/////////////////////////////////
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
/////////////////////////////////
//函数功能:1602写命令函数
//输入函数:
//返回函数:
/////////////////////////////////
void write_com(uchar com)
{
lcd_rs=0;
P0=com;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
/////////////////////////////////
//函数功能:1602写数据函数
//输入函数:
//返回函数:
/////////////////////////////////
void write_data(uchar date)
{
lcd_rs=1;
P0=date;
delay(5);
lcd_en=1;
delay(5);
lcd_en=0;
}
/////////////////////////////////
//函数功能:初始化函数
//输入函数:
//返回函数:
/////////////////////////////////
void init()
{
duan=0;         //初始化1602显示
wei=0;
lcd_en=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x10);
TMOD=0x01;       //初始化定时器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
hour=0;
min=0;
sec=0;
write_com(0x80);      //初始化1602显示
for(num=0;num<13;num++)
  {
   write_data(table[num]);
   delay(5);
  }
write_com(0x80+0x40);
for(num=0;num<12;num++)
  {
   write_data(table1[num]);
   delay(5);
  }
}
void main()
{
  init();
   
  while(1);  
}
write_time(uchar add,uchar num0)
{
uchar ge,shi;
ge=num0%10;
shi=num0/10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);

}
  
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
if(counter==20)
{
  counter=0;
  sec++;
  if(sec==60)
  {
   sec=0;
   min++;
   if(min==60)
   {
    min=0;
    hour++;
    if(hour==24)
    {
     hour=0;
    }
    write_time(4,hour);
   }
   write_time(7,min);
  }
  write_time(10,sec);
}

}  
这段程序是1602显示 计时的程序  但是在程序中  write_time()函数只是一个子函数  是计算时分秒的个位十位的   在主函数中也没有运行该函数  但是为什么在1602的显示中  时间还是一直动呢   希望又人帮我解释下

相关帖子

沙发
NE5532| | 2010-3-15 20:37 | 只看该作者
你的主函数啥都没有,程序全部是依靠中断运行的,中断里你不是一直在刷显示么,楼主咋自己写晕了呀?

使用特权

评论回复
板凳
Name_006|  楼主 | 2010-3-16 17:57 | 只看该作者
2# NE5532   是啊 这点我明白  但是 那个write_time()函数没有运行啊  里边的那时分秒的  个位十位是怎么计算出来的呢

使用特权

评论回复
地板
Name_006|  楼主 | 2010-3-17 14:39 | 只看该作者
顶下~~

使用特权

评论回复
5
chen3bing| | 2010-3-17 15:22 | 只看该作者
中断里面调用了呀!

使用特权

评论回复
6
NE5532| | 2010-3-17 16:54 | 只看该作者
2# NE5532   是啊 这点我明白  但是 那个write_time()函数没有运行啊  里边的那时分秒的  个位十位是怎么计算出来的呢
Name_006 发表于 2010-3-16 17:57


看中断。

使用特权

评论回复
7
Name_006|  楼主 | 2010-3-17 19:49 | 只看该作者
6# NE5532
哦哦 看到了 真晕呀

使用特权

评论回复
8
Name_006|  楼主 | 2010-3-17 19:49 | 只看该作者
5# chen3bing
恩恩 谢谢啦 看到了 ~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32 等各类单片机程序开发,NFC读卡器,sfz读卡器,C#上位机开发。WX:3539-733-14

3

主题

59

帖子

1

粉丝