篮球计分牌的程序和仿真
单片机源程序如下:
- #include "reg51.h"
- sbit SEG1 = P1^7;
- sbit SEG2 = P1^6;
- sbit SEG3 = P1^5;
- sbit SEG4 = P1^4;
- sbit MARK1 = P3^0;
- sbit MARK2 = P3^1;
- sbit MARK3 = P3^2;
- unsigned char MARK;
- char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段码
- void delay(unsigned int t)
- {
- while(t--);
- }
- void DigDisplay(void)
- {
- unsigned char i;
- for(i = 0;i < 4;i++)
- {
- switch(i) //位选,选择点亮的数码管,
- {
- case(0):
- SEG4 = 0;SEG3 = 1;SEG2 = 1;SEG1 = 1;P2 = table[MARK % 10];break;
- case(1):
- SEG4 = 1;SEG3 = 0;SEG2 = 1;SEG1 = 1;P2 = table[MARK % 100 / 10];break;
- case(2):
- SEG4 = 1;SEG3 = 1;SEG2 = 0;SEG1 = 1;P2 = table[MARK % 1000 / 100];break;
- case(3):
- SEG4 = 1;SEG3 = 1;SEG2 = 1;SEG1 = 1;P2 = table[MARK % 1000 / 1000];break;
- }
- delay(100); //间隔一段时间扫描
- P2 = 0x00;//消隐
- }
- }
- void Points(void)
- {
- if(MARK1 == 0)
- {
- delay(500);
- if(MARK1 == 0)
- {
- MARK = MARK + 1;
- }
- while(!MARK1);
- }
-
- if(MARK2 == 0)
- {
- delay(500);
- if(MARK2 == 0)
- {
- MARK = MARK + 2;
- }
- while(!MARK2);
- }
-
- if(MARK3 == 0)
- {
- delay(500);
- if(MARK3 == 0)
- {
- MARK = MARK + 3;
- }
- while(!MARK3);
- }
- }
- void main(void)
- {
- while(1)
- {
- Points();
- DigDisplay();
- }
- }
复制代码
所有资料51hei提供下载:
计分牌.zip
(78.96 KB, 下载次数: 27)
|