(一)程序现象

(DS1302+超声波)上电显示超声波,按下S7切换为时钟,松开切换为超声波测距

(二)程序思路

关键按键如何去设置,以下是按键程序。

if(s4==0){Delay10ms();if(s4==0){         while(1){DS_get();saomiao[0]=abile[TIME[2]/16];saomiao[1]=abile[TIME[2]%16];saomiao[2]=0xbf;saomiao[3]=abile[TIME[1]/16];saomiao[4]=abile[TIME[1]%16];saomiao[5]=0xbf;saomiao[6]=abile[TIME[0]/16];saomiao[7]=abile[TIME[0]%16];if(s4!=0)break;}}while(!s4);}

当按键按下的时候(没松开),按键会一直在while里不出来。当按键松开的时候就可以跳出去。短按直接在while外面进行设置就好了。

(三)程序设计

main.c函数

#include <stc15f2k60s2.h>
#include <intrins.h>
#include "ds1302.h"void shumaguan();
void Timer0Init();
void Delay500ms();unsigned char abile[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char saomiao[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
unsigned int distance;void Send_Wave();
sbit TX=P1^0;
sbit RX=P1^1;
sbit s4=P3^0;
unsigned int t=0;
void Delay12us();
void mdistance();
void xianshi();
void Delay10ms();void main()
{   Timer0Init();        P2=0XA0;P0=0X00;  DS_init();while(1){mdistance();xianshi();}
}void xianshi()
{if(distance ==99){saomiao[0]=0x90;saomiao[1]=0x90;saomiao[2]=0x90;Delay500ms();saomiao[3]=saomiao[4]=saomiao[5]=saomiao[6]=saomiao[7]=0xff;}else{saomiao[0]=abile[distance%1000/1000];saomiao[1]=abile[distance%100/10];saomiao[2]=abile[distance%10];Delay500ms();saomiao[3]=saomiao[4]=saomiao[5]=saomiao[6]=saomiao[7]=0xff;}if(s4==0){Delay10ms();if(s4==0){         while(1){DS_get();saomiao[0]=abile[TIME[2]/16];saomiao[1]=abile[TIME[2]%16];saomiao[2]=0xbf;saomiao[3]=abile[TIME[1]/16];saomiao[4]=abile[TIME[1]%16];saomiao[5]=0xbf;saomiao[6]=abile[TIME[0]/16];saomiao[7]=abile[TIME[0]%16];if(s4!=0)break;}}while(!s4);}
}void Delay10ms()       //@11.0592MHz
{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);
}void Delay500ms()      //@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do{do{while (--k);} while (--j);} while (--i);
}void weixuan() interrupt 1
{unsigned char i;P2=P2&0x1f|0xe0;P0=0xff;P2=0x1f;P2=P2&0x1f|0xc0;P0=1<<i;P2=0x1f;P2=P2&0x1f|0xe0;P0=saomiao[i];P2=0x1f;i++;if(i==8) i=0;
}
void Timer0Init()       //100??@11.0592MHz
{AUXR |= 0x80;     //?????1T??TMOD &= 0xF0;       //???????TL0 = 0x9A;       //??????TH0 = 0xA9;        //??????TF0 = 0;       //??TF0??TR0 = 1;      //???0????  EA=1;ET0=1;
}void Send_Wave()
{unsigned char i;for(i=0;i<8;i++){TX=1;Delay12us();TX=0;Delay12us();}
}
void mdistance()
{   unsigned int time=0;TMOD&=0X0F;//定时器1模式TL1=0;TH1=0;//初始化Send_Wave();  //发送声波信号TR1=1;//启动定时器while((RX==1)&&(TF1==0)) ;//等待超声波信号返回或者等到测量超出范围TR1=0; //停止定时器if(TF1==0){t=TH1;t=(t<<8)|TL1;  //将计算值装到16为计数器distance=t*0.017;//测量距离}else{   TF1=0;//禁止中断溢出distance=99;}
//  if(distance>=30)
//  {P2=0XA0;P0=0Xff;P2=0X1F;}
//  else
//  {P2=0XA0;P0=0X00;P2=0X1F;}}
void Delay12us()
{unsigned char i;_nop_();_nop_();i = 33;while (--i);
}

ds1302.c函数

#include<ds1302.h>sbit SCK=P1^7;
sbit SDA=P2^3;
sbit RST = P1^3;   // DS1302??                                             unsigned char code READ_RTCADDR[7]={0X81,0X83,0X85,0X87,0X89,0X8B,0X8D};
unsigned char code WRITE_RTCADDR[7]={0x80,0X82,0X84,0X86,0X88,0X8C,0X8E};char TIME[7]={0x50,0x59,0x23};void Write_Ds1302(unsigned  char temp)
{unsigned char i;for (i=0;i<8;i++)        { SCK=0;SDA=temp&0x01;temp>>=1; SCK=1;}
}   void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{RST=0;    _nop_();SCK=0; _nop_();RST=1;     _nop_();  Write_Ds1302(address);    Write_Ds1302(dat);      RST=0;
}unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302(address);for (i=0;i<8;i++)   {       SCK=0;temp>>=1; if(SDA)temp|=0x80; SCK=1;} RST=0;    _nop_();SCK=0; _nop_();SCK=1; _nop_();SDA=0; _nop_();SDA=1; _nop_();return (temp);
}
void DS_init()
{unsigned char n;Write_Ds1302_Byte(0x8e,0x00);//关闭写保护for(n=0;n<3;n++)Write_Ds1302_Byte(WRITE_RTCADDR[n],TIME[n]);Write_Ds1302_Byte(0x8e,0x80);
}void DS_get()
{unsigned char n;for(n=0;n<3;n++)TIME[n]=Read_Ds1302_Byte (READ_RTCADDR[n]);
}

ds1302.h函数

#ifndef __DS1302_H_
#define __DS1302_H_#include<stc15f2k60s2.h>
#include<intrins.h>void Write_Ds1302(unsigned  char temp) ;
void Write_Ds1302_Byte( unsigned char address,unsigned char dat ) ;
unsigned char Read_Ds1302_Byte ( unsigned char address );
void DS_init();
void DS_get();
extern char TIME[7];//---??????--//#endif

基于stc15f2k60s2芯片单片机编程(按键的长短按)相关推荐

  1. 基于stc15f2k60s2芯片单片机编程(数码管)

    **蓝桥杯stc15f2k60s2芯片编程(数码管)** ** ** (1)数码管显示01234567 ** ** #include <stc15f2k60s2.h>unsigned ch ...

  2. 基于stc15f2k60s2芯片单片机编程(时钟DS1302)

    **stc15f2k60s2芯片编程(时钟DS1302)** main.c函数 #include <STC15F2K60S2.H> #include <intrins.h> # ...

  3. 基于stc15f2k60s2芯片单片机编程(串口+超声波)

    通过单片机发送当前超声波测量的距离给串口1显示 (感谢广东某大神的帮助) #include <stc15f2k60s2.h> #include <intrins.h>void ...

  4. 基于stc15f2k60s2芯片单片机编程(闹铃)

    用定时器中断写时钟加调节 1)关闭蜂鸣器.继电器等无关外设: 2)设备初始化时钟为 23 时 59 分 50 秒,闹钟提醒时间 0 时 0 分 0 秒. A.时间显示格式 2 3 - 5 9 - 5 ...

  5. 基于stc15f2k60s2芯片单片机编程(秒表)

    用定时器做一个秒表,精确到0.1,S7按下,开始计时,S6按下清零 #include <stc15f2k60s2.h> #include <intrins.h> void Ti ...

  6. 基于stc15f2k60s2芯片单片机编程(EEPROM24C02实验)

    主函数 #include <stc15f2k60s2.h> #include <intrins.h> #include <12.h> void shumaguan( ...

  7. 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...

    基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...

  8. c语言程序 电子钢琴按键,基于51单片机8按键电子琴-简易版系统设计(原理图+程序仿真+论文)...

    一. 引言 单片机因其体积小,功能强,价格低廉而得到广泛应用,同时随着我国经济的飞速发展,单片机在越来越多的领域得到了广泛的应用,现在国内的单片机多用于电话,玩具和LCD等产品,预计在未来,利用单片机 ...

  9. 单片机c语言ad8035,基于QN8035芯片的无线数据接收器设计.doc

    PAGE PAGE 45 TOC \o "1-3" \h \u 21287 摘要 1 7139 Abstract 1 29370 第一章 绪论 2 10178 1.1 课题背景 2 ...

  10. ftp上位机编程c语言,基于USB芯片CY7C68013A的上位机C++程序

    标签: 基于USB芯片CY7C68013A的上位机C 基于USB芯片CY7C68013A的上位机C程序 在国标<质量管理体系 基础和术语>GB/T19000-2008/ISO9000:20 ...

最新文章

  1. python实现ks算法_Python实现Dijkstra算法
  2. 表空间迁移(transport tablespace)测试案例
  3. 两条信号之间加电容_上海贴片电阻电容厂家地址-华腾电子
  4. 世界杯足球竞赛源码下载
  5. Linux网络协议栈:网络包接收过程
  6. 在JavaScript中实现命名空间
  7. NuGet无法下载的问题
  8. Java线程拾遗(可重入锁)
  9. 【攻略】舰これ辅助程式介绍-航海日志
  10. 最小二乘支持向量回归Matlab实现
  11. 【linux】系统压力模拟工具stress
  12. 计算机培训学校可行性报告,在线考试系统可行性分析报告
  13. mdk是什么意思_MDK是什么意思
  14. AB测试(Test)——原理与实际案例手把手教学
  15. 送给1985年的朋友 ZT
  16. Havel—Hakimi定理(度序列)
  17. vue 中使用 marked + highlight.js 代码高亮
  18. MySQL 架构与内部模块
  19. 微信小程序openid如何获得IP白名单的方法
  20. 云和恩墨祝各位“女神”节日快乐!

热门文章

  1. 《算法设计与分析基础》【part1】
  2. mysql with roll up_GROUP BY...WITH ROLL UP 分组统计后的再合计
  3. 项目管理知识体系指南(PMBOK 指南) 第6版——笔记
  4. python win32api sendmessage_python win32api模拟后台鼠标点击的问题。
  5. Alex 的 Hadoop 菜鸟教程: 第12课 Sqoop1 安装/导入/导出教程
  6. 全国计算机比赛微课视频,“教学之星”全国总决赛 | 冠军朱琦微课及现场比赛视频...
  7. mysql联合查询的几种方式
  8. MySQL OCP认证(文末附参考题)
  9. 【Scratch案例实操】scratch我们爱编程 scratch编程案例教学 scratch创意编程 少儿编程教案
  10. 简述导线平差计算的五个步骤_结点导线如何平差