Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1966368
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2010-06-03 14:28:33

昨天帮别人做毕业设计,花了几个小时,程序大体上写出来了.现在将相关图纸和程序上传如下:
仿真图和c程序工程文件如下:
文件: 毕业设计.rar
大小: 208KB
下载: 下载

源代码如下:

#include

#define uchar unsigned char 

#define uint  unsigned int

///数码管位选管脚定义

#define wei  P0

///数码管段选管脚定义

#define duan P2

///短延时时间宏定义

#define short_delay 1

///抢答开始标志位

#define start     0

#define not_start 1

///八组参赛者抢答按键

#define key0 P1^0

#define key1 P1^1

#define key2 P1^2

#define key3 P1^3

#define key4 P1^4

#define key5 P1^5

#define key6 P1^6

#define key7 P1^7

///主持人加分键

#define key8 P3^6

///主持人抢答开始按键

#define key9 P3^7

///主持人数码管位选管脚定义

sbit  zhuchi_dis1=P3^0;

sbit  zhuchi_dis2=P3^1;

///蜂鸣器输出管脚定义

sbit  ring=P3^4;

uchar cnt=20;

uchar person=0;//主持台前抢答者编号显示

///数码管位码表

uchar wei_dis[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

///数码管断码表

uchar table[]={       

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x40

};

volatile uchar fenshu1,fenshu2,fenshu3,fenshu4,fenshu5,fenshu6,fenshu7,fenshu8;//八组成员分数缓冲寄存器

uchar daojishi_flag=1;     //倒计时标志位

uchar start_flag=not_start;//开始抢答标志位

///*********************蜂鸣器初始化****************************///

void ring_init()

{

       ring=0;

}

///*********************记分牌分数初始化****************************///

void init_fenshu()

{

fenshu1=0;

fenshu2=0;

fenshu3=0;

fenshu4=0;

fenshu5=0;

fenshu6=0;

fenshu7=0;

fenshu8=0;

}

///*********************定时器0初始化****************************///

void timer0_init()

{

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

ET0=1;//开定时器0中断

//TR0=1;//定时器0开始计数

}

///*********************外部中断0初始化****************************///

void int0_init()

{

EX0=1;//外部中断0使能

IT0=0;//负边沿触发方式

EA=1; //总中断使能

}

///*********************外部中断1初始化****************************///

void int1_init()

{

EX1=1;//外部中断0使能

IT1=0;//负边沿触发方式

EA=1; //总中断使能

}

///*********************设备初始化****************************///

void int_device()

{

timer0_init();

int0_init();

int1_init();

init_fenshu();

ring_init();

}

 

///*********************延时子函数****************************///

void delay(uint z)

{

uint x,y;

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

   for(y=110;y>0;y--);

}

 

///*********************数码管显示子函数****************************///

void led_display(uchar z)

{

///*********************主持人****************************///

zhuchi_dis1=0;

duan=table[z/10];

delay(short_delay);

zhuchi_dis1=1;

 

zhuchi_dis2=0;

duan=table[z%10];

delay(short_delay);

zhuchi_dis2=1;

 

 

 

///*********************第一组****************************///

wei=wei_dis[0];

duan=table[fenshu1/10];

delay(short_delay);

wei=wei_dis[1];

duan=table[fenshu1%10];

delay(short_delay);

///*********************第二组****************************///

wei=wei_dis[2];

duan=table[fenshu2/10];

delay(short_delay);

wei=wei_dis[3];

duan=table[fenshu2%10];

delay(short_delay);

///*********************第三组****************************///

wei=wei_dis[4];

duan=table[fenshu3/10];

delay(short_delay);

wei=wei_dis[5];

duan=table[fenshu3%10];

delay(short_delay);

///*********************第四组****************************///

wei=wei_dis[6];

duan=table[fenshu4/10];

delay(short_delay);

wei=wei_dis[7];

duan=table[fenshu4%10];

delay(short_delay);

///*********************第五组****************************///

wei=wei_dis[8];

duan=table[fenshu5/10];

delay(short_delay);

wei=wei_dis[9];

duan=table[fenshu5%10];

delay(short_delay);

///*********************第六组****************************///

wei=wei_dis[10];

duan=table[fenshu6/10];

delay(short_delay);

wei=wei_dis[11];

duan=table[fenshu6%10];

delay(short_delay);

///*********************第七组****************************///

wei=wei_dis[12];

duan=table[fenshu7/10];

delay(short_delay);

wei=wei_dis[13];

duan=table[fenshu7%10];

delay(short_delay);

///*********************第八组****************************///

wei=wei_dis[14];

duan=table[fenshu8/10];

delay(short_delay);

 

wei=wei_dis[15];

duan=table[fenshu8%10];

delay(5);

}

 

///*********************主函数****************************///

void main()

{

//fenshu1=12;

uchar second=15;

    int_device();

       while(1)

       {

 

         if(start_flag==start)

            TR0=1;

         else

            TR0=0;

 

         if(daojishi_flag)

                {

                       if(cnt==0) //定时已达到一秒

                       {

                       cnt=20;

                    second--;

                       if(second<=0)

                          {

                       daojishi_flag=0;

                          second=0;

                             }   

                       }

                 led_display(second);

                 }

          else

              led_display(person);

       }

}

///*********************外部中断0服务子函数****************************///

void int0() interrupt 0

{

       if( start_flag==not_start)

              ring=1;

       if(start_flag==start)

           ring=0;

       switch(P1)

       {

       case 0xfe: {person=1;daojishi_flag=0;} break;

       case 0xfd: {person=2;daojishi_flag=0;} break;

       case 0xfb: {person=3;daojishi_flag=0;} break;

       case 0xf7: {person=4;daojishi_flag=0;} break;

       case 0xef: {person=5;daojishi_flag=0;} break;

       case 0xdf: {person=6;daojishi_flag=0;} break;

       case 0xbf: {person=7;daojishi_flag=0;} break;

       case 0x7f: {person=8;daojishi_flag=0;} break;

       //case 0xfd: person=2; break;

       }

   

}

///*********************外部中断1服务子函数****************************///

void int1() interrupt 2

{

      if(key8==0)

       {

           delay(300);

              switch(person)

              {

              case 1:{fenshu1+=5;if(fenshu1>=99) fenshu1=0;}break;

              case 2:{fenshu2+=5;if(fenshu2>=99) fenshu2=0;}break;

              case 3:{fenshu3+=5;if(fenshu3>=99) fenshu3=0;}break;

              case 4:{fenshu4+=5;if(fenshu4>=99) fenshu4=0;}break;

              case 5:{fenshu5+=5;if(fenshu5>=99) fenshu5=0;}break;

              case 6:{fenshu6+=5;if(fenshu6>=99) fenshu6=0;}break;

              case 7:{fenshu7+=5;if(fenshu7>=99) fenshu7=0;}break;

              case 8:{fenshu8+=5;if(fenshu8>=99) fenshu8=0;}break;

              }  

       }

 

       if(key9==0)

       {

          start_flag=start; 

       }

 

}

///*********************定时器0中断服务子函数****************************///

void timer0() interrupt 1

{

   TH0=(65535-50000)/256;

   TL0=(65535-50000)%256;

   cnt--;

}

阅读(1875) | 评论(0) | 转发(1) |
0

上一篇:ATMEGA16开发板

下一篇:NIOS II 系列程序

给主人留下些什么吧!~~