日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于stc15f2k60s2芯片单片机编程(按键的长短按) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)程序現象

(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芯片单片机编程(按键的长短按)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产乱轮视频 | 激情六月综合 | 一级视频黄色 | 人人妻人人澡人人爽欧美一区 | 中国色老太hd | 在线播放不卡 | 欧美性猛交xxx乱大交3 | 黄色网址在线播放 | 日韩午夜视频在线观看 | 丰满少妇被猛烈进入高清播放 | 久久亚洲综合国产精品99麻豆精品福利 | 秘密爱大尺度做爰呻吟 | 国产午夜电影 | 欧美性生活 | 久久免费片 | 97影院在线午夜 | 欧美日韩女优 | a在线一区| av免费视屏 | av在线等| 日韩成人在线免费视频 | 久久国产91 | 华人永久免费视频 | 青青免费在线视频 | 欧美美女啪啪 | 在线观看国产福利 | 亚洲色图19p | 免费看国产黄色 | 欧美三级久久久 | 91喷水视频 | 日本在线网址 | 国产成人综合一区二区三区 | 亚洲激情三区 | 国产精品7777777 | 成人在线中文字幕 | 欧美日韩国产一区在线 | 国产黄网站 | 亚洲黄片一区二区三区 | 免费九九视频 | 男女黄床上色视频 | 在线视频福利 | 美女扒开腿让人桶爽原神 | 一区二区三区www污污污网站 | 一二三区精品 | 加勒比hezyo黑人专区 | 午夜电影网一区 | 欧美视频色 | 在线精品国产 | 欧美日韩精品电影 | 制服丝袜在线播放 | 国产精品免费视频一区二区三区 | 美女考逼| 好吊操精品视频 | 一区二区日韩欧美 | 日韩欧 | 亚洲有吗在线 | 激情婷婷六月天 | 少妇久久久久久被弄高潮 | 日韩一区二区免费在线观看 | a黄色一级片 | 国产不卡在线视频 | 成人黄色片网站 | 欧美资源站 | 国产亚洲美女精品久久久2020 | 超碰在线a | 欧美另类自拍 | 一本色道久久综合亚洲精品图片 | 爱的色放韩国电影 | 午夜影视福利 | 国产女女做受ⅹxx高潮 | 精品久久久免费 | 欧美人体一区二区三区 | 亚洲大片免费 | 国产亚洲欧美精品久久久www | 中文字幕在线观看欧美 | 日韩av在线播放不卡 | 亚洲天堂一二三 | 免费一区二区三区四区 | 日本大尺度电影免费观看全集中文版 | 五月婷综合 | 五月天丁香激情 | 免费视频久久 | 少妇熟女一区二区三区 | 亚洲视频精品在线观看 | 超碰97在线看 | 狠狠干人人干 | 天天爽天天爽天天爽 | 久久黄色小说 | 国产精品黄在线观看 | 成人黄色在线 | 久久9久久 | 黑人精品一区二区 | 亚洲av无码一区东京热久久 | 欧美顶级少妇做爰hd | 欧美日韩图片 | 在线不卡日本 | 日日爱666 | 中文字幕不卡在线观看 | 男女插鸡视频 |