学校的课程设计,用proteus单片机和keil设计一个LED数码管显示的秒表,如下

仿真运行的时候数码管不能正常计数,应该是程序问题,帮忙看看程序代码出了哪些问题,我检查不出来了,P1口边上那三个按键分别设计成开始、暂停和清零。电路图和代码如下:

你的程序有问题,仿真图不要用三极管驱动,反而不显示。如下画法就行,那4个按键不变,没有画。

程序中的按键处理,方法不当。

先改成如下的程序,先调出能显示,然后你自己再增加按键功能。

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit START = P1 ^0;

sbit STOP = P1 ^1;

sbit RESET = P1 ^2;

sbit dp = P0 ^7;

sbit w1 = P2 ^6;

sbit w2 = P2 ^7;

uchar aa,temp,STOPFLAG,STARTFLAG,miaoshi,miaoge;

uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表错误

void display();

void delay( uint z);

void init();

void main()

{

init();

while(1)

{

display();//不用带参数

if(aa == 20)

{

aa = 0;

temp ++;

if(temp == 60)

{

temp = 0;

}

}

}

}

void delay(uint z)

{ uchar x,y;

for(x = z; x > 0; x--)

for(y = 110 ; y > 0; y --);//y不能小于110

}

void display()//不用带参数

{

miaoshi = temp/10;

miaoge = temp%10;

w1 = 1;

P0 = table[miaoshi];

delay(2);

w1 = 0;

w2 = 1;

P0 = table[miaoge];

delay(2);

w2 = 0;

}

void init()

{ TMOD = 0x01;

TH0 = (65536 - 50000)/256;

TL0 = (65536 - 50000)%256;

EA = 1;

ET0 = 1;

TR0 = 1;

}

void timer0() interrupt 1

{ TH0 = (65536 - 50000)/256;

TL0 = (65536 - 50000)%256;

aa ++;

}

追问

数字能显示了,接下来如何设置按键代码。刚才忘记说了,P1口那三个从上往下依次是开始暂停清零?

温馨提示:内容为网友见解,仅供参考
无其他回答

学校的课程设计,用proteus单片机和keil设计一个LED数码管显示的秒表...
EA = 1;ET0 = 1;TR0 = 1;} void timer0() interrupt 1 { TH0 = (65536 - 50000)\/256;TL0 = (65536 - 50000)%256;aa ++;}

用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...
用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。用proteus做的时钟 可以显示年月日时分秒 可调整时间 有图 \/ includereg52.h

利用Proteus仿真软件设计一个具有按键清零功能的计时00-59的两位秒表时...
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};unsigned char second;unsigned char keycnt;unsigned int tcnt;void main(void){ unsigned char i,j;TMOD=0x02;ET0=1;EA=1;second=0;P1=dispcode[second\/10];P2=dispcode[second%10];while(1){ if(P3_5==0){ for(i=20;i>0...

用定时器计数器设计一个简单的秒表
本次课设我们要设计一个能显示计时状态和结果的秒表,它是基于定时器\/计数器设计一个简单的秒表。本次设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器\/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现四位LED...

...用proteus 设计电子秒表系统 ,用2位LED数码显示,显示时间为00~99秒...
EA=1;ET0=1;} void Timer0Interrupt(void) interrupt 1 \/\/定时器T0中断 方式1 { uchar time;TH0=0x3c;TL0=0xb0;time++;if(time==20) \/\/20X50ms=1s { time=0;ge++;} } void main(){ t0intinit( );while(1){ display( );while(!KS){display( );if(KS)TR0=1;} whil...

51单片机 秒表设计
\/\/ 51单片机 秒表,显示时间为0000—9999秒,启动、停止,(停止后再次启动复位)include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar bai,shi;uint...

用单片机AT89C51制作电子秒表,需要用什么元器件。
元件:89c51,四位共阴极数码管,非自锁按键,10K电阻,10uf电解电容,30pf瓷片电容,10k排阻,晶振 留个邮箱,我把Proteus仿真图发给你,以下是程序,临时写的,Proteus测试正常,不知道符不符合你的要求,你可以自己再稍作修改。用的是12M晶振 include<reg51.h> define uchar unsigned char define uint...

单片机 用proteus仿真 “电子秒表显示器”时无法复位,就是图中红色圈...
这个可能是你程序的问题 不防检查检查程序 看中断对不 在一个复位按键完全可以用最小系统里的复位 可以节省一个按键

...我用PROTEUS模拟的 不准 慢了10多秒 单片机晶振是12mhz
中断函数太长,建议用时钟芯片,如DS13820

...C语言程序设计实训100例——基于8051+Proteus仿真》 第03篇源代码...
实例62:用数码管慢速动态扫描显示数字"1234"实例63:用LED数码显示器伪静态显示数字1234 实例64:用数码管显示动态检测结果 实例65:数码秒表设计 实例66:数码时钟设计 实例67:用LED数码管显示计数器T0的计数值 实例68:静态显示数字“59”单片机c语言编程100个实例目录3 键盘控制*键盘控制* *键盘控制...

相似回答