51单片机 秒表设计 怎么用按键控制开始 停止和清零?

51单片机 秒表设计 怎么用按键控制开始 停止和清零?,第1张

#include<reg52h>
sbit AA=P3^4;//数码管显示用IO端口
sbit BB=P3^5;
sbit CC=P3^6;
sbit DD=P3^7;
sbit X=P2^7;//启动按钮
sbit Y=P2^6;//停止按钮
sbit Z=P2^5;//清零按钮
int aa,temp;
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极
//char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
void delay(int x); //延迟函数声明
void display(int d); //显示函数声明
//
//
void main()
{
temp=0;
TMOD=0x01;//设置定时器工作方式
TH0=(65536-922)/256;//1毫秒
TL0=(65536-922)%256;//定时器装初始值
EA=1;//开总中断
ET0=1;//开定时器 0 的中断
while(1)
{
if(X==0){TR0=1;}//开启定时器,开始计数
if(Y==0){TR0=0;}//关闭定时器,暂停计数
if(Z==0){temp=0;}//清零计数器
display(temp); //调用显示子函数
}
}
//
//
void delay(int x) //延迟子函数
{
int y;
for(;x>0;x--)
for(y=80;y>0;y--);
}
//
//
void display(int d) //显示子函数
{
char d1,d2,d3,d4;
d4=d%10; //取个位 %求余
d3=(d/10)%10; //取十位
d2=(d/100)%10; //取百位
d1=(d/1000)%10; //取千位
P1=table[d4]; AA=0; delay(1); AA=1;//个位显示
P1=table[d3]; BB=0; delay(1); BB=1;//十位显示
P1=table[d2]; CC=0; delay(1); CC=1;//百位显示
P1=table[d1]; DD=0; delay(1); DD=1;//千位显示
}
//
//
此程序本人编写的,绝对可用,只要你连接正确

大致方法就是用PC机的串口或者USB虚拟串口和单片机通信。对PC没什么要求。在PC端的编程可能用到VB的串口控件或者用C++之类写的话要用到WINDOWS的串口通信API。网上有很多“PC机串口编程”的例子。比如你要电机走100步,你在PC机上输入“走100步”,然后PC通过串口(USB虚拟串口)发送到单片机串口,单片机解读后控制电机转动。

用一个PNP(或NPN)三极管起到开关的作用控制单片机的电源E极接5VCC,C极通过限流电阻接单片机的VCC,另外,加一个开关S,一端接单片机的VCC,一端加外加5VCCCB极接单片要的P10口,程序的思路是:按下开关S,使单片机运行程序从P10输出低电平,使三极管导通,单片机供电,然后放开开关S这时,单片机内部的定时器启动,进行定时,定时1S后,中断使P10口输出高电平,三极管截止,单片机断电因此,要使单片机正常运行,需要在10内对定时器重新赋值,不让其溢出产生中断


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13326493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-15
下一篇 2023-07-15

发表评论

登录后才能评论

评论列表(0条)

保存