51单片机c语言秒表的仿真ISIS7 professional

有报酬

 

0

 

 

代码

#include "reg52.h"    

typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå

typedef unsigned char u8;//¶¨ÒåÎÞ·ûºÅλµÄcharÀàÐÍ

sbit Key1=P1^4; //¿ªÊ¼ºÍÔÝÍ£¼ü

sbit Key2=P1^5; //¸´Î»¼ü

sbit Key3=P1^6; //¼Ó¼ü

sbit Key4=P1^7; //¼õ¼ü

sbit LEDS1=P1^0;//ÊýÂë¹ÜÏÔʾµÚһλ

sbit LEDS2=P1^1;//ÊýÂë¹ÜÏÔʾµÚ¶þλ

sbit LEDS3=P1^2;//ÊýÂë¹ÜÏÔʾµÚÈýλ

sbit LEDS4=P1^3;//ÊýÂë¹ÜÏÔʾµÚËÄλ

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔʾ0~FµÄÖµ

u8 num=0;//ÏÔʾµÄÊýÖµ

void delay1(u16 i)//ÑÓʱº¯Êý

{3

 while(i--); 

}

void Timer0Init()//¶¨Ê±Æ÷³õʼ»¯

{

 TMOD|=0X01;//Ñ¡ÔñΪ¶¨Ê±Æ÷T0ģʽ£¬¹¤×÷·½Ê½1£¬½öÓÃTRO´ò¿ªÆô¶¯

  TH0 = 0XD8;

  TL0 = 0XF0;//10ms¶¨Ê±

 ET0=1;//´ò¿ª¶¨Ê±T0ÖжÏÔÊÐí

 EA=1;//´ò¿ª×Ü¿ª¹Ø

 TR0=0;//´ò¿ª¶¨Ê±Æ÷   

}

 

u8 Key_Scan()//°´¼üɨÃ躯Êý

{  

 static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾

 if(key_up&&(Key1==0||Key2==0||Key3==0|| Key4==0))

 {

  delay1(1000);//Ïû¶¶ 

  key_up=0;

  if(Key1==0) return 1;

  else if(Key2==0)return 2;

  else if(Key3==0)return 3;

  else if(Key4==0)return 4;

 }

 else if(Key1==1&&Key2==1&&Key3==1&& Key4==1)

  key_up=1;      

  return 0;// ÎÞ°´¼ü°´ÏÂ

}

void DigDisplay()//ÊýÂë¹Ü¶¯Ì¬É¨Ã躯Êý£¬Ñ­»·É¨Ãè8¸öÊýÂë¹ÜÏÔʾ

{

 u8 i;

 for(i=0;i<2;i++)

 {

  switch(i) //λѡ£¬Ñ¡ÔñµãÁÁµÄÊýÂë¹Ü

  {

   case(0):

    LEDS1=1;LEDS2=0;P0=smgduan[num%10];break;//ÏÔʾµÚ0λ

   case(1):

    LEDS1=0;LEDS2=1;P0=smgduan[num/10];break;//ÏÔʾµÚ1λ

  }

  delay1(1000); //¼ä¸ôÒ»¶Îʱ¼äɨÃè 

  P0=0x00;//ÏûÒþ

 }

}

 

 

void main()

 u8 key;//¼üÖµ

 Timer0Init();//³õʼ»¯¶¨Ê±Æ÷10ms  

 LEDS3=0;

 LEDS4=0;

 while(1)

 { 

  key=Key_Scan();

  if(key==1) 

   TR0=~TR0;//¶¨Ê±Æ÷¿ª»òÕß¹Ø

     if(TR0==0)

     if(key==3)      

         num=num+1;//¼Ó1s

     if(key==4)

         num=num-1;//¼õ1s

     

  if(key==2)

  {

   num=0;//¼ÆÊýÖµÇåÁã

   TR0=0;//¶¨Ê±Æ÷¹Ø

  }

  

  DigDisplay(); //ÊýÂë¹ÜÏÔʾº¯Êý 

 }  

}

void Timer0() interrupt 1//ÖжÏ

{

 static u16 i;

  TH0 = 0XD8;//10ms¶¨Ê±

  TL0 = 0XF0;

 i++;

 if(i==100)//1sµ½ÁË

 {

  i=0;

  num++;

  if(num==100) num=0;

 } 

}

 

 

参考GPT和自己的思路:

根据提供的代码,这是一个基于51单片机的c语言秒表程序的仿真。程序的主要功能是根据按键输入控制计时器计时,同时通过数码管显示经过的时间。具体来说,按下第一个按键可以开始/停止计时,按下第二个按键可以清零计时,按下第三个按键可以将计时加1秒,按下第四个按键可以将计时减1秒。

在仿真时,建议使用ISIS 7 Professional,并将代码下载到单片机板上进行测试。如果出现问题,可以通过调试程序、检查电路连接等方法进行排查。需要注意的是,程序中使用了定时器控制计时,因此建议根据实际需求进行修改,以确保计时的准确性和精度。