1、 / 和上面的参数一起混的,犯规-这两个的用法在后面体现#define READY 0x7e 自定义数据类型typedef unsigned char Byte; / 一个字节typedef unsigned int Word; / 一个字,两个字节typedef bit Bool; / 模仿布尔型变量/typedef sbit Port; / 本想用自定义一个端口类型的变量,比较方便,但是这句话步知道为何通不过编译 定义MAX7219寄存器#define REG_NO_OP 0x00 / 定义空操作 register#define DIG_1 0x01 / 定义数码管1 register#d
2、efine DIG_2 0x02 / 定义数码管2 register#define DIG_3 0x03 / 定义数码管3 register#define DIG_4 0x04 / 定义数码管4 register#define DIG_5 0x05 / 定义数码管5 register#define DIG_6 0x06 / 定义数码管6 register#define DIG_7 0x07 / 定义数码管7 register#define DIG_8 0x08 / 定义数码管8 register#define REG_DECODE 0x09 / 定义解码控制 register#define R
3、EG_INTENSITY 0x0a / 定义显示亮度 register#define REG_SCAN_LIMIT 0x0b / 定义扫描限制 register#define REG_SHUTDOWN 0x0c / 定义shutdown模式 register#define REG_DISPLAY_TEST 0x0f / 定义display test#define INTENSITY_MIN 0x00 / 定义最低显示亮度#define INTENSITY_MAX 0x0f / 定义最高显示亮度/* 定义硬件引脚连接*/sbit DATA=P20; / MAX7219的数据口sbit LOAD=
4、P21; / MAX7219的锁存端口sbit CLK=P22; / MAX7219的时钟端口/sbit HOST_SWITCH=P00; / 主持人开关的接口sbit HOST_START=P00; /主持人按键,用来重新开始的按键 startsbit HOST_CANCEL=P01; /主持人用来取消抢答的按键 clearsbit SWITCH1_3=P14; / 调节倒计时时间的拨码开关,下划线前面的号代表开关的序号,下划线后面的号代表该开关的数值sbit SWITCH2_2=P15; / 同上sbit SWITCH3_2=P16;sbit SWITCH4_1=P17;sbit BEEP
5、=P07; /定义蜂鸣器端口sbit LS138_C=P24; /定义译码器输入端sbit LS138_B=P25; /同上 sbit LS138_A=P26; /同上sbit LS138_E1=P27; /定义译码器使能端 定义全局变量Byte data intrCounter; / 计时器中断次数Byte data beginNum; / 开始倒计时的时间Byte data counterBack; / 将中断次数放在里面以备后用Byte data showNum; / 数码管正在显示的时间Bool data isStart; / 是否开始抢答 Bool data isFoul; / 是否
6、犯规Bool data isPressed; / 是否有抢答的键按下Byte data number_temp; / 用来记录P1口上次状态的一个变量code unsigned char C51BOX23 _at_ 0x43;/* 共阴极七段数码管显示对应段查询表(数字0-9分别对应code_table0-9)*/Byte code code_table_zheng10=0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b;Byte code code_table10=0x01,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,
7、0x00,0x04; 函数声明void MAX7219_SendByte (Byte dataout);void MAX7219_Write (Byte reg_number, Byte dataout);void MAX7219_DisplayChar(Byte digit, Byte character);void MAX7219_Clear (void);void MAX7219_SetBrightness (Byte brightness);void MAX7219_DisplayTestStart (void);void MAX7219_DisplayTestStop (void);
8、void MAX7219_ShutdownStart (void);void MAX7219_ShutdownStop (void);void MAX7219_Init (void);void Delay10ms(void);Bool GetHostStartKey (void);Bool GetHostCancelKey (void);void GetCounter(void);Byte GetPressed(Byte KeyState);void IT0_Init(void);void Timer0_Overflow();void PressedHandle(Byte keyPressed
9、);void GetOrFoulHandle(Bool state);void CancelHandle();void SPEAKER_count (void); /声明倒计时声音函数void SPEAKER_start(void); /声明开始抢答声音函数void SPEAKER_get(void); /声明抢到声音函数void SPEAKER_foul(void); / 声明犯规声音函数* MAX7219_SendByte()* 描述: 向MAX7219传送一个字节的数据* Arguments : dataout = data to send* Returns : none*/void M
10、AX7219_SendByte (Byte dataout)Byte i;for (i=8;i0;i-) Byte mask=1(i-1);/mask是个掩码,取位使用 CLK=0;/MAX7219的位传入是在时钟的上升沿之前,所以在每发一位之前都要变为低电平 if (dataout&mask) DATA=1; else DATA=0; CLK=1;/八个bit都传递完成后变为高电平,锁存* MAX7219_Write() 向 MAX7219 写命令 reg_number = register to write to* dataout = data to write to MAX7219未完
11、*/void MAX7219_Write (Byte reg_number, Byte dataout) LOAD=0;/也是锁存上升沿之前的,发这两个字节之前要变为低电平 MAX7219_SendByte(reg_number);/发送寄存器地址 MAX7219_SendByte(dataout);/发送数据 LOAD=1;/变为高电平,锁存/* MAX7219_DisplayChar() 使某一位显示一个数字 digit = digit number (0-7)* character = character to display (0-9, A-Z)*/void MAX7219_Displ
12、ayChar(Byte digit, Byte character) MAX7219_Write(digit, character);* MAX7219_Clear() 清除所有位的显示void MAX7219_Clear (void) Byte i; for (i=1; ij-);* GetHostStartKey() 取得主持人开始按键的键值 1-主持人按键; 0-主持人未按键Bool GetHostStartKey (void)if (HOST_START =1) return 0;else Delay10ms ();/如果发现主持人按键接通,要先延时100us,防止抖动if (HOST_START=1)else return 1;/延时时候还是接通,则判断为该键确实按下 * GetHostCancelKey() 取得主持人取消按键的键值Bool GetHostCancelKey (void)if (HOST_CANCEL =1)* GetCounter* Descriptio
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1