使用2个数码管设计一个60秒倒计时C语言程序,要求用定时器中断定时1秒。 仿真元件数码管为7SEG-COM-CATHODE

单片机:使用2个数码管设计一个60秒倒计时C语言程序,要求用定时器中断定时1秒。 仿真元件数码管为7SEG-COM-CATHODE。要求:1.带仿真图 2.静态显示 3.完整C程序!!!

7SEG-COM-CATHODE 为共阴管

#include<reg51.h>

#define uchar unsigned char 

#define uint unsigned int

uchar num=60,shi,ge;

uchar code TAB[]={

  0x3F,/*0*/

        0x06,/*1*/

        0x5B,/*2*/

        0x4F,/*3*/

        0x66,/*4*/

        0x6D,/*5*/

        0x7D,/*6*/

        0x07,/*7*/

        0x7F,/*8*/

        0x6F,/*9*/

 };

void T0INTinit()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void main()

{

T0INTinit();

while(1)

{

shi=num/10;

ge=num%10;

P0=TAB[shi];

P2=TAB[ge];

}

}

void T0INT() interrupt 1

{

uchar i;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

if(i==20)

{

i=0;

num--;

if(num==0)

num=60;

}

}

追问

仿真截图上传上来看看

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-10
unsigned char counter,s;
unsigned ....// 数组,7段数码管数据,记得7SEG-COM-CATHODE是共阳吧?
void delays() //延迟函数
{
unsigned char a;
for(a=0;a<200;a++);
}
void display_t() //动态部分,个位十位切换
{
SMG_data=num[s%10]
SMG_bit =;
display_t();

SMG_data=num[s/10]
SMG_bit =;
display_t();

}
void interrup_services() //设定定时器和中断,3cb0,50ms
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
ET0=1;
EA=1;

}
void main() //主函数
{
void interrup_services() ;
while(1)
display_t();
}
void interrupt_ini() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
counter++;
if(counter>19}{s++ ; counter=0 ;} //50ms*20=1s,0~19为20
if(s >59 ) {s=0;}
}
这程序很简单,仿真设定好晶振,改下就行了包括定时器的,我这个设定是晶振12M的。12HZ的真心没用过。追问

能把仿真图截下来看看吗?是静态显示的吗?

本回答被网友采纳
第2个回答  2012-06-10
晶振是多少赫兹? 是51单片机么?追问

12HZ,是51单片机C语言程序,静态显示

追答

数码管的型号,最好是原理图给我

追问

数码管为7SEG-COM-CATHODE,图你根据题目自己画,记得是静态显示的!做完发我邮箱[email protected]