#include "public.h" #include "lcd1602.h" #include "stdio.h" sbit led=P2^6; int s=0;//定时器计数 unsigned char led_t=0; unsigned int alarm_s=0;//当前时间 unsigned int alarm_m=0; unsigned int alarm_h=0; unsigned char clock_s=0;//闹钟时间 unsigned char clock_m=0; unsigned char clock_h=0; unsigned char buf[2]; void delay(unsigned int i)//属于read 1ms 延时 { unsigned int k; while (i--) for(k=0;k<110;k++); } void side() { unsigned char buf_0[3]; buf_0[0]=buf[1]; buf_0[1]=buf[0]; buf[0]=buf_0[0]; buf[1]=buf_0[1]; } void time0 () interrupt 1 //T0计时器中断程序 一次50ms { TH0 = (65536-46483)/256; TL0 = (65536-46483)%256;//重新装载50ms if(led_t>=10)//led闪烁 { led=!led; led_t=0; } led_t++; if(s==20)//计时满1s { alarm_s++; //当前时间 if(alarm_s==60) { alarm_m++; sprintf(buf,"%d",alarm_m); lcd1602_show_string(11,0,buf); if(alarm_m==60)//向小时进位 { alarm_h++; sprintf(buf,"%d",alarm_h); lcd1602_show_string(8,0,buf); alarm_m=0; } alarm_s=0; } s=0; } s++; } void main() { char a; a=1; TMOD=0x01;//定时器工作方式1 TH0 = (65536-46483)/256; TL0 = (65536-46483)%256;//T0定时器初值装载 计时50ms EA=1;//总中断允许 ET0=1;//定时器T0允许中断 TR0=1; lcd1602_init();//LCD1602初始化 lcd1602_show_string(0,0,"Time:");//第一行显示 lcd1602_show_string(8,0,"00:00"); lcd1602_show_string(0,1,"Clock:");//第二行显示 while(1) { } }
时间: 2023-07-15 17:10:08 浏览: 58
这段代码是一个运行在单片机上的时钟程序,使用了定时器中断来实现计时器功能。主要的变量包括当前时间和闹钟时间,以及一个计数器s来实现1秒的计时。程序的主要逻辑是在定时器中断程序中对当前时间进行更新,并且每一秒更新LCD1602屏幕上的显示内容。同时,程序还通过控制LED灯的闪烁来实现一个简单的提示功能。这段代码需要在单片机开发环境下编译和烧录才能运行。
相关问题
#include<REG52.H> #include<stdio.h> #include <intrins.h> sbit Trig=P2^0; sbit Echo=P2^1;超声模块测距代码补全
`#include<REG52.H>`是一段头文件的引用,代表使用了基于Intel 8051的单片机开发环境。`<stdio.h>`是标准输入输出头文件的引用。`<intrins.h>`是用于特殊函数的头文件引用。
以下是超声模块测距的代码补全:
```
#include<REG52.H>
#include<stdio.h>
#include <intrins.h>
sbit Trig=P2^0;
sbit Echo=P2^1;
void delay(unsigned int us) //延时函数
{
while(us--);
}
unsigned char read_distance() //读取距离函数
{
unsigned char distance;
Trig = 0; //初始化
delay(2);
Trig = 1; //触发测量
delay(10);
Trig = 0; //停止测量
while(!Echo); //等待Echo为高电平
TH0 = 0;
TL0 = 0; //清零计时器
while(Echo); //等待Echo为低电平
distance = (unsigned char)(TH0*256+TL0)/58.0; //计算距离
return distance;
}
void main()
{
unsigned char distance;
TMOD |= 0x01; //设置为定时器0,工作方式1
while(1)
{
distance = read_distance(); //读取距离
printf("The distance is %d cm\n",distance); //打印距离
delay(500); //延时500ms
}
}
```
#include<stdio.h>和 #include "stdio.h" 有啥区别
在C语言中,#include是一个预处理指令,用于在编译程序之前将指定的头文件包含到源代码中。其中,#include <stdio.h>和#include "stdio.h"都是用来包含头文件<stdio.h>的指令。但它们有以下几点区别:
1. #include <stdio.h>是从系统目录中查找头文件,而#include "stdio.h"是从当前目录中查找头文件。
2. 如果在当前目录和系统目录中都存在同名的头文件,则#include "stdio.h"会优先使用当前目录中的头文件,而#include <stdio.h>则会使用系统目录中的头文件。
3. 如果使用了编译器的特殊选项,如-I选项,指定了头文件的搜索路径,则#include <stdio.h>会在指定的路径中查找头文件,而#include "stdio.h"仍然会在当前目录中查找头文件。
综上所述,#include <stdio.h>和#include "stdio.h"的主要区别在于它们查找头文件的方式不同。如果你需要包含C标准库的头文件,则通常使用#include <stdio.h>;如果你需要包含自己编写的头文件,则通常使用#include "stdio.h"。