资讯详情

单片机+数码管简单秒表程序,带停止启动复位

p0口是数码管的位选入口,P2口是数码管的段选用4位一体的数码管,P3.0 P3.1 P3.2分别是启动停止和复位按钮

#include <reg51.h> #define uchar unsigned char #define uint unsigned int #define DATA P2 sbit start=P3^0; sbit stop=P3^1; sbit reset=P3^2; //---------启停标志----- bit SAT=0; bit R =0; //------------ 码表---------- uchar tab[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //------------ uint time=0; //时间 uint cnt=0; //计数 //------------- void delay(int k) { while(k--); } void startkey() { static uchar i,j; if(start==0) { if(i==0) { j++; if(j>3) { if(start==0) { i=1;j=0; SAT=1; } } } } else { i=j=0; } } void stopkey() { static uchar i,j; if(stop==0) { if(i==0) { j++; if(j>3) { if(stop==0) { i=1;j=0; SAT=0; } } } } else { i=j=0; } } void resetkey() { static uchar i,j; if(reset==0) { if(i==0) { j++; if(j>3) { if(reset==0) { i=1;j=0; RST=1; } } } } else { i=j=0;RST=0; } } //---------数码管显示 00.0------- void shownumber(int num) { DATA=tab[num%10]; P0=7; delay(100); DATA=0x80; P0=6; delay(100); DATA=tab[num%100/10]; P0=5; delay(100); DATA=tab[num/100]; P0=4; delay(100); } //---------定时器初始化ˉ--------- void time0_init() { TMOD=0x01; TH0=(65536-18348)/256; TL0=(65536-18348)%256; EA=1; ET0=1; } void T0_time()interrupt 1 { TH0=(65536-18348)/256; TL0=(65536-18348)%256; cnt++; if(cnt==5) { time++;cnt=0; } } void main(void) { delay(50000); time0_init(); while(1) { shownumber(time); if(SAT==1)TR0=1; if(SAT==0)TR0=0; if(RST==1){TR0=0;SAT=0;time=0;} startkey(); stopkey(); resetkey(); } } -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台