24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1358  |  回复: 3

小木木赏金

新虫 (小有名气)

[求助] 求大神帮我详细解释一下这段程序!

#include <reg52.h>                 //调用单片机头文件#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535#include <intrins.h>bit flag_300ms ;uchar code table_num[]="0123456789abcdefg";sbit rs=P1^0;         //寄存器选择信号 H:数据寄存器          L:指令寄存器sbit rw=P1^1;         //寄存器选择信号 H:数据寄存器          L:指令寄存器sbit e =P1^2;         //片选信号   下降沿触发unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;unsigned int time[6]={0};/***********************1ms延时函数*****************************/void delay_1ms(uint q){        uint i,j;        for(i=0;i<q;i++)                for(j=0;j<110;j++);}/********************************************************************* 名称 : delay_uint()* 功能 : 小延时。* 输入 : 无* 输出 : 无***********************************************************************/void delay_uint(uint q){        while(q--);}/********************************************************************* 名称 : write_com(uchar com)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无***********************************************************************/void write_com(uchar com){        e=0;        rs=0;        rw=0;        P0=com;        delay_uint(25);        e=1;        delay_uint(100);        e=0;}/********************************************************************* 名称 : write_data(uchar dat)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无***********************************************************************/void write_data(uchar dat){        e=0;        rs=1;        rw=0;        P0=dat;        delay_uint(25);        e=1;        delay_uint(100);        e=0;        }/********************************************************************* 名称 : write_string(uchar hang,uchar add,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下                  write_string(1,5,"ab cd ef;"* 输入 : 行,列,需要输入1602的数据* 输出 : 无***********************************************************************/void write_string(uchar hang,uchar add,uchar *p){        if(hang==1)                   write_com(0x80+add);        else                write_com(0x80+0x40+add);        while(1)        {                if(*p == '\0')  break;                write_data(*p);                p++;        }        }/***********************lcd1602上显示两位十进制数************************/void write_sfm3(uchar hang,uchar add,uint date){        if(hang==1)                   write_com(0x80+add);        else                write_com(0x80+0x40+add);        write_data(0x30+date/100%10);        write_data(0x30+date/10%10);        write_data(0x30+date%10);        }/***********************lcd1602初始化设置************************/void init_1602(){        write_com(0x38);        //        write_com(0x0c);        write_com(0x06);        delay_uint(1000);        write_string(1,0,"   Heart Rate     ";                write_string(2,0,"     000/min       ";}/*************定时器0初始化程序***************/void time_init()          {        EA   = 1;                   //开总中断        TMOD = 0X01;          //定时器0、定时器1工作方式1        ET0  = 1;                  //开定时器0中断         TR0  = 1;                  //允许定时器0定时}/***********外部中断0初始化程序****************/void init_int0()          //外部中断0初始化程序{        EX0=1;                          //允许外部中断0中断        EA=1;                           //开总中断        IT0 = 1;                   //外部中断0负跳变中断}/****************主函数***************/void main(){                init_1602();                    //1602初始化        time_init();                    //初始化定时器         init_int0();          //外部中断0初始化程序        while(1)        {                                        if(displayOK==0)//如果显示关                {                         rate = 0;                }                else//如果显示开                {                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);                }                write_sfm3(2,5,rate);                delay_1ms(300);        }}void int0() interrupt 0{        if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理        {                        TR0=1;//开定时器        }        else        {                time=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间                TH0 = 0x3c;                TL0 = 0xb0;     // 50ms         12M                timecount=0;//50ms计数清零                i++;                if(i==6)//记录到超过等于6次时间                {                        i=1;//计数从1开始                        displayOK=1;    //测得5次开始显示?                }                                                                        }}/*************定时器0中断服务程序***************/void time0_int() interrupt 1{                TH0 = 0x3c;        TL0 = 0xb0;     // 50ms         12M        timecount++;//每50ms一次计数        if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示        {                        i=0;//数据个数清零                        timecount=0;//50ms计数清零                        displayOK=0;//显示关                        TR0=0;//定时器关                        TH0 = 0x3c;                        TL0 = 0xb0;     // 50ms         12M        }}

发自小木虫Android客户端
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

WindManZhou

金虫 (正式写手)

这么简单,有什么可以解释的,直接说自己的难点在哪里

发自小木虫Android客户端
2楼2017-06-05 16:46:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木木赏金

新虫 (小有名气)

引用回帖:
2楼: Originally posted by WindManZhou at 2017-06-05 16:46:52
这么简单,有什么可以解释的,直接说自己的难点在哪里

主函数里面的程序和定时器0中断里面的程序讲的是什么?

发自小木虫Android客户端
3楼2017-06-05 17:44:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

WindManZhou

金虫 (正式写手)


jjdg: 金币+1, 感谢参与 2017-06-06 14:29:46
这是最基本的定时器和1602的字符显示,你先看看基础知识吧,这个还能怎么跟你说?

发自小木虫Android客户端
4楼2017-06-05 18:11:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小木木赏金 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料工程322分 +7 哈哈哈吼吼吼哈 2026-04-01 7/350 2026-04-02 07:05 by yjolah
[考研] 一志愿北京科技,085601总分305求调剂 +9 半生瓜! 2026-04-01 10/500 2026-04-01 23:33 by 半生瓜!
[考研] 理学07化学 303求调剂 +12 睿08 2026-03-27 12/600 2026-04-01 22:36 by Dyhoer
[考研] 266求调剂 +7 阳阳哇塞 2026-04-01 7/350 2026-04-01 22:27 by barlinike
[考研] 070300化学279求调剂 +15 哈哈哈^_^ 2026-03-31 17/850 2026-04-01 21:37 by 给你你注意休息
[考研] 0817化工学硕调剂 +11 努力上岸中! 2026-03-31 11/550 2026-04-01 20:30 by 赖春艳
[考研] 一志愿郑大材料工程290求调剂 +18 Youth_ 2026-03-30 18/900 2026-04-01 19:23 by 无际的草原
[考研] 材料科学与工程339求调剂 +11 hyz0119 2026-03-31 12/600 2026-04-01 18:40 by 伟大河北
[考研] 353求调剂 +4 拉钩不许变 2026-04-01 4/200 2026-04-01 18:10 by 记事本2026
[考研] 生物与医药考研调剂 +5 铁憨憨123425 2026-03-31 5/250 2026-04-01 18:01 by syh9288
[考研] 一志愿厦门大学化学工程(专硕)-数二英二406分-求调剂 +4 厦大化工 2026-04-01 4/200 2026-04-01 17:54 by JYD2011
[考研] 0703化学/290求调剂/本科经历丰富/工科也可 +14 丹青奶盖 2026-03-26 16/800 2026-04-01 15:58 by oooqiao
[考研] 0805求调剂 +6 是水分 2026-03-31 6/300 2026-04-01 09:05 by oooqiao
[考研] 327求调剂 +5 小卡不卡. 2026-03-29 5/250 2026-03-30 19:30 by Wang200018
[考研] 085701求调剂初试286分 +5 secret0328 2026-03-28 5/250 2026-03-30 12:54 by fangnagu
[考研] 283求调剂(080500) +14 A child 2026-03-27 14/700 2026-03-30 12:06 by 探123
[考研] 材料与化工304求B区调剂 +4 邱gl 2026-03-26 7/350 2026-03-30 08:39 by 探123
[考研] 343求调剂085601 +3 要努力学习x 2026-03-29 3/150 2026-03-29 18:35 by wxiongid
[考研] 283求调剂 +3 A child 2026-03-28 3/150 2026-03-28 15:41 by ms629
[考研] 266求调剂 +11 阳阳哇塞 2026-03-27 12/600 2026-03-27 17:56 by yu221
信息提示
请填处理意见