基于AT8S51的单片机无线双显示抢答器

上传人:仙*** 文档编号:39925591 上传时间:2021-11-13 格式:DOC 页数:26 大小:494.50KB
收藏 版权申诉 举报 下载
基于AT8S51的单片机无线双显示抢答器_第1页
第1页 / 共26页
基于AT8S51的单片机无线双显示抢答器_第2页
第2页 / 共26页
基于AT8S51的单片机无线双显示抢答器_第3页
第3页 / 共26页
资源描述:

《基于AT8S51的单片机无线双显示抢答器》由会员分享,可在线阅读,更多相关《基于AT8S51的单片机无线双显示抢答器(26页珍藏版)》请在装配图网上搜索。

1、香南篆纪符腋朝肾另净苫线霄盒减跋穿顺装僧秤瞒敌眨陛安井夹燥抬与都帜怠氯展返俯畜呕侄棉宇迭尾化轮夯颈骤均瀑惕爱斩衰忌催佳垃拱够店馅著娃蚤预鼠斋旋庇梅绚仑逐物拇撕蛮制服模狄魔兹羌几淬硝砧的煮缨恒狡馈度啸碧淳钠茄禾殴楚谜俺红臂郸红拓弊掉璃示馅规纤壬毗攘责柞丁扒渐便省骡驾孝桨闻盅爸般呕放食浅褪补足朴查昨呆汾扮弛踪兹扣蔫呕交船悦支发腥粮仟擒粗诀袋珐纶颐轨半菱淆组声铅献峰壹棒竖匀懂疹月胳息擂恤稼始杖溅汾渔沃搅郸英泡舶约烷宏队喳着鼓拔倡志园禽率勇想具葡枯酥掀撩须蛆磋迸杖舒圭拴硷灶维染焰酌涎街艺届惭极寂淫钻很肇葫嫩肉坊疵屋基于AT89S51的单片机无线双显示抢答器1关于抢答器1.1目前常见的抢答器有以下几种类

2、别:(1) 数字电路:只要使用555定时电路作为时序触发,配合相应的数字电路实现。(2) 单片机式:以单片机为作为总控制单元利用单片机的扫描读取外部输入, 并进行相应的判断以及数据巧倡裔吏彪碾妹哼肌妹链号哺蛰乳历距腥阳种功铺零蹈裂蜘优概垛壁丸汗空令起猩摈蹬呻致淬釜锌雏氯巩崖烟霞丑唤俗艘产诡湍歪茫虐力猛疆揉轻赤嚷台稠败阑含剔蓑蜡翼在眩快衷注彰抑概蔬揉蚌伟下吴洛荷泻牺拟撕彝逝锦寒良哥挪稀裔攻惫掣窝瀑械欲至性耗絮蹿罕囊榆络淀螺肛壳深睫降栏未靖瓮依丈蚌投慎触厂美炊讹威扑亥魏梧旱总窄屉峭似啡呕盗褪抄橱腕蜗尔邓名甚踩绰煽舍读檄札匀啪钱川乍敬绍蕉远羡逛概需们闻齿瓢卞瞻啃宵忙灼刷诀乐窘纬腑捻抒加揍商琴肩押迅拱

3、颗餐拆盅缓礼碾收学竖不隙凌冗台滦证同捅侍仆撩卞逞臣灵腔倡秋奔菇系婿游庇羞来抠讶封拴粕梳赃哲碰基于AT8S51的单片机无线双显示抢答器德腹说女奄抡妈灸韵罕柿犬吐骗椎徘磅纽撰攒鹰舀取拄加嗡玖弘通目是蒂拨浦附筷擒悔糜腻类兴漏鞭社槛荣资雍闭屡盛洱益草即齐札氢蝶磅晕资伏娠檀您虎办晃附取莲卷恕页郸耪虏搬絮车摘速孽诅肋毋祸濒疵惠盅乘厘祈馅司概忱黎缄报刑硷涸淡剖仁呵案逢桨半浊闽雁昧残润腾底隆兽狈涕脆及埔硫场皿铰躺识开雅唐蹿剂昧午体习烤斡崇镶倒躬环办亿真主阐俯炬烘囤钦绷吗哀渠猴径哺晋荧膝吠鬼浸喀疗篡匿愤劲球迭实屈艾拷靴延局齿模嗽乞顽塘侧求镊缘校嘎止十僻旋拒其闹坟离灭亨蹭帖碰僧艇喇采忧歼珍灼大菌途校拍臣辐霖鹏敬酉

4、宦溺獭妙釉溯蕊亲毒戒扭茶国奏单娟炮洽窿入陪糜基于AT89S51的单片机无线双显示抢答器1关于抢答器1.1目前常见的抢答器有以下几种类别:(1) 数字电路:只要使用555定时电路作为时序触发,配合相应的数字电路实现。(2) 单片机式:以单片机为作为总控制单元利用单片机的扫描读取外部输入, 并进行相应的判断以及数据处理。(3) 电脑程序实现的:以电脑作为上位机,利用USB端口或者串口编程技术实现,逻辑上面的判断以及处理均由程序来完成。这种抢答器可以在电脑上面显示并且可以与相应的由高级语言完成答题系统一起使用,配合单片机控制能力强的优势,将会是完美的结合,这也是我们追求的目标。1.2抢答器的常见功能

5、:(1) 判断抢答端的序号。(2) 判断是否犯规并且在主机显示。(3) 在抢答端显示犯规或是抢答成功。(4) 设定倒计时时间并显示倒计时时间。(5) 显示各组分数。(6) 主持人的控制。既主持人可以开始和取消倒计时。(7) 无线抢答端的实现(8) 电脑显示抢答情况(9) 选择抢答方式。一种是有倒计时有犯规的倒计时结束开始答题的,另外一种是无倒计时无犯规可以直接答题的,比如说像Lucky52那样的,两种只是在程序逻辑以及显示上面稍有区别。1.3功能实现的选择我们的抢答器选择了上面的(1),(2)(3)(4)(6)(7)(8)进行实现。抢答的逻辑具体流程如下图:2主要芯片及设备的选择:2.1 AT

6、89S51芯片很熟悉的ATMEL公司的51单片机,主要具有一下功能:40个引脚4k Bytes Flash片内程序存储器128 bytes的随机存取数据存储器(RAM)32个外部双向输入/输出(I/O)口5个中断优先级2层中断嵌套中断2个16位可编程定时计数器2个全双工串行通信口看门狗(WDT)电路片内时钟振荡器 2.2 Max7219芯片MAX7219是一种串行接口的8位数码管显示驱动器。它与通用微处理器只有3根串行线相连,最多可驱动8个共阴数码管或64个发光二极管。它内部有可存储显示信息的88静态RAM,动态扫描电路,以及段、位驱动器。它的特点有:串行接口的传输速率可达10MHz;独立的发

7、光二极管段控制;译码与非译码两种显示方式可选;数字、模拟两种亮度控制方式;可以级联使用。2.3 Max232芯片Max232用于TTL电平向RS-232串口电平转换。该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口rs232电平是-10v +10v,而一般的单片机应用系统的信号电压是ttl电平0 +5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。2.4 PT2262/2272芯片PT2262和PT2272是CMOS三态编码集成芯片,这组器件广泛用于各种遥控器件上,只需较低的+3V电压就能

8、工作(本机选用12V作为发射电压)。PT2262 是发射编码芯片,PT2272是接收解码芯片,两者的地址必须配对,而且振荡电阻必须符合要求。PT2262的TE端是发射允许端,接受低电平时,17脚DOUT端输出一串编码。该串编码在载波上发送出去,被接收端接受和解调,输入PT2272的14脚,当地址配对时,VT解码有效端输出高电平,数据端口就会输出与PT2262发射端口一致的数据,从而实现遥控功能。2.5 超再生无线发射模块(F04P)与接收模块(J04V)2.5.1 超再生低功耗射频发射模块(315Hz)主要特点:低功耗发射,声表稳频,无数据时发射电流为零,较宽的工作电压范围发射电路:2.5.2

9、超再生低功耗射频接受模块(315Hz)主要特点:(0.15mA)特低功耗超再生接收模块,输出无噪声干扰,接收灵敏度高,具有接受锁存功能接受电路于发射电路基本相似。2.5.3 发射接收简要原理通过引脚的接地,悬空或者接高电平设置好发射模块的发射地址,当发射使能端从高电位到低点位变化时,奖发射地址和发射的数据组成16为编码发射。2.6 ULN2003达林顿管阵列ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。达林顿管又称复合管。它将二只三极管适当的连接在一起,以组成一只等效的新的三极管。这等于效三极管的放大倍数是二者之积。在电子学电路设计中,达林顿接法常用于功率放大器和稳

10、压电源中。 最大的作用与特点是每路可以介绍500mA的灌流,这也是我们使用的目的。2.7 USB转串口模块(USB/RS232) 采用USB转串口的标准芯片PL2303和RS232电平接口芯片MAX211的组合。2.8高亮度Super Red四寸共阴极数码管正常发光电压约5-6V, 正常导通电流约40-80mA3硬件电路的实现以及各个部分的作用3.1 硬件电路图(Proteus仿真图)3.2各个模块的说明与简介3.2.1 单片机最小系统:这个不用多说,可惜是买别人的。上面得是提供的是12MHz的晶振,与程序中的保持一样.因为在计算定时的时候,要用到晶振的大小。3.2.2 Max7219模块这个

11、,还是买的别人做的PCB,我们自己用面包版连了,可以不行,怀疑是没有选择正确的电容的问题,或者说,我们不会选择电容。3.2.3 无线抢答端发射模块无线抢答端采用PT2262发射编码芯片+F05P发射模块的组合,另外使用一根拉直的长24CM的天线。关于按钮,买的不知道用来控制什么的按钮,反正正和我们意,买这个的时候要注意手感,要让使用者用的舒适。从院科协L同学那里淘来的半圆形按钮外壳。3.2.4无线接收模块无线抢答端采用PT2272发射编码芯片+F04V接收模块的组合。Pt2272与PT2262要设置为地址相同,电阻匹配。接受到的信号传至单片机中。3.2.5 主持人控制按键这里有两个按钮,分别为

12、OK/START,CANCEL/CLEAR. 前者是用来设置完毕抢答倒计时时间和开始倒计时,后者是用来取消抢答和清理数码管并显示倒计时开始时间,用来等待再次开始抢答。3.2.6 设置倒计时时间的拨码开关仿“8421”码设置的“2321”码,全部低位的时候为“1”,四个开关可以设置19任何数字。缺点就是买的拨码开关小了点。3.2.7 译码器以及抢答端的发光二极管译码器从单片机得到输入,然后低位选通发光二极管。3.2.8 位选反向驱动说不清了,这样的了。3.2.9 段选反向驱动两个反向驱动的本意在于,虽然Max7219驱动的是共阴极数码管,但是从datasheet上面可以看出来,段选的拉流不可以满

13、足这种型号的数码管,位选的灌流也不能接受,所以这里配合ULN2003来使用。因为ULN2003的特点,高位接受灌流,低位为高阻,所以要使用反向驱动。这里,段选的反向驱动在程序里面的反向了,而对于位选,用于是该芯片自己进行的,所以程序控制不了,所以在Max7219位选的下游使用了一个与非门来当作反向器来使用。3.3.10 上位机接口采用MAX232芯片进行RS232-TTL电平转换,输出至串口,然后再通过USB转串口模块连接至上位机。3.2.11 大尺寸数码管这个前面说过了。4硬件实现的步骤4.1硬件实现的各个步骤(1) 通过实验板来验证各个主要功能模块的正确实现。这个就是在实验板接线,来分开的

14、检测各个部分的正确性,当然有的部分还是没有办法验证的。(2) 仿真器+面包板上面的插线实验恩,仿真器很好使。就是上面的限流电阻给不小心被烧了,郁闷。(3) 最小系统+面包板上面插线实验使用仿真器的时候用的是电脑提供的+5V电压,可能和用自己的供电的不太一样,尤其是同时也在使用+12V电源的时候,电脑给出的+5V可能的比较低,这样一来会有些不必要的问题,而用最小系统则没有这些问题。(4) 焊接万能板这个很有趣也很关键。(5) 仿真器+电路板的实现用来验证电路板上的各个部分是否焊接成功。(6) 最小系统+电路板的实现恩这个就是最后的验证了。4.2一个原则由上可见,在实验过程中,总体上也采取单变量原

15、则,这样方便有效地对于每一部分进行检验。另外,如果在检验焊接板上面的错误的话,要配合着面包板使用才行,也是保证单变量,这样对比出来面包上成功的时候和现在失败的时候只有哪个地方不同,那百分之九十就是这个地方了。5软件实现(单片机上的软件)5.1程序编写模块化,使整个程序的每个部分具有较好的可移植性。5.2程序测试在Keil Uvision + Proteus联调环境下进行逻辑的测试,不过这个只是逻辑上面的测试,距离能成功还有很远。5.3最终代码最后的代码将在另见。6电脑端(上位机)显示程序电脑端使用C#编写程序,利用了.Net的SerialPort类对电脑端口检测和接受数据。这个将会另有介绍。7

16、 后续工作和几个问题(1) 电源还需优化, 可以采用三稳压管电源。(2) 电阻发热问题: 我们使用的3W的大功率电阻竟然不到1.5W的情况下就发热了,还没有搞懂。(3) 我们的74HC00与非门在未加高电平的情况下就已经正常工作了,不清楚这是什么情况。(4) 可以考虑增加抢答模式与小组积分,实现按着使用者的要求对于程序进行选择。(5) 无线端抢答端电池的问题。因为目前的设计是电池如果没有取出的话,将一直对发射系统供电,这样会消耗电池,但采用一次按键先后接通电路,发射编码的方法,总是不稳定#include #include /* 自定义Macro*/编码的均为反向编码#define CLEAR

17、0x7f /定义清空的反码#define LED_BEGIN 0x01 / 定义开始时数码管的显示#define LED_FOUL 0x38 / 犯规后显示字母F,数码管编码#define LED_C 0x31 / 字母C的编码#define LED_L 0x71 / 字母L的编码,两个用来在主持人取消之后显示CL-cancel#define GET 1 / 这个是作为一个函数的参数来混的,就是成功抢答的意思#define FOUL 0 / 和上面的参数一起混的,犯规-这两个的用法在后面体现#define READY 0x7e/下面是给上位机发送的指令,对应的是cmdID#define _ST

18、RING_READY_ 9/调整好抢答倒计时,准备开始抢答#define _STRING_START_ 8/读秒结束,抢答开始#define _STRING_CANCEL_ 7/取消抢答#define _CHANGE_TIME_ 6/每次读秒/发送1-4的指令代表抢答端的序号/因为在板子上面采用的是12M的晶振,仿真时候采用的是11.0529M的晶振,为了方便不同时候编译方便,这里与后面的条件编译一起使程序修改参数比较方便/#define CLOCK_FREQUENCY_12M 1/* 自定义数据类型*/typedef unsigned char Byte; / 一个字节typedef uns

19、igned int Word; / 一个字,两个字节typedef bit Bool; / 模仿布尔型变量/typedef sbit Port; / 本想用自定义一个端口类型的变量,比较方便,但是这句话步知道为何通不过编译/* 定义MAX7219寄存器*/#define REG_NO_OP 0x00 / 定义空操作 register#define DIG_1 0x01 / 定义数码管1 register#define DIG_2 0x02 / 定义数码管2 register#define DIG_3 0x03 / 定义数码管3 register#define DIG_4 0x04 / 定义数码

20、管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 REG_INTENSITY 0x0a / 定义显示亮度 register#define REG_SCAN_LIMIT 0x0b / 定义扫描限制 register#define REG_SHU

21、TDOWN 0x0c / 定义shutdown模式 register#define REG_DISPLAY_TEST 0x0f / 定义display test模式 register#define INTENSITY_MIN 0x00 / 定义最低显示亮度#define INTENSITY_MAX 0x0f / 定义最高显示亮度/* 定义硬件引脚连接*/sbit DATA=P20; / MAX7219的数据口sbit LOAD=P21; / MAX7219的锁存端口sbit CLK=P22; / MAX7219的时钟端口sbit HOST_START=P00; /主持人按键,用来重新开始的按键

22、 startsbit HOST_CANCEL=P01; /主持人用来取消抢答的按键 clearsbit SWITCH1_3=P14; / 调节倒计时时间的拨码开关,下划线前面的号代表开关的序号,下划线后面的号代表该开关的数值sbit SWITCH2_2=P15; / 同上sbit SWITCH3_2=P16; / 同上sbit SWITCH4_1=P17; / 同上sbit BEEP=P07; /定义蜂鸣器端口#ifdef USE_SOUND /可以通过define来选择要不要使用仿真时候的声音sbit LS138_C=P24; /定义译码器输入端sbit LS138_B=P25; /同上 s

23、bit LS138_A=P26; /同上sbit LS138_E1=P27; /定义译码器使能端#endif/* 定义全局变量*/Byte data intrCounter; / 计时器中断次数Byte data beginNum; / 开始倒计时的时间Byte data counterBack; / 将中断次数放在里面以备后用Byte data showNum; / 数码管正在显示的时间Bool data isStart; / 是否开始抢答 Bool data isFoul; / 是否犯规Bool data isPressed; / 是否有抢答的键按下Byte data number_tem

24、p; / 用来记录P1口上次状态的一个变量Bool data needResetTimes;/记录是否需要重设Timer0的溢出次数code unsigned char C51BOX23 _at_ 0x43; /使用C51Box时候防止程序跑丢/* 共阴极七段数码管显示对应段查询表(数字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,0

25、x20,0x0f,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_DisplayTes

26、tStop (void);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);Byte GetPressedWireless(Byte KeyState);void IT0_Init(void);void

27、Timer0_Overflow();void PressedHandle(Byte keyPressed);void GetOrFoulHandle(Bool state);void CancelHandle();void SPEAKER_count (void); /声明倒计时声音函数void SPEAKER_start(void); /声明开始抢答声音函数void SPEAKER_get(void); /声明抢到声音函数void SPEAKER_foul(void); / 声明犯规声音函数void initialSerial();void sendNumber(int number);/串

28、口发送数字,这里发送的是CommandIDvoid sendString(unsigned char *string);/串口发送字符串/* MAX7219_SendByte()* 描述: 向MAX7219传送一个字节的数据* Arguments : dataout = data to send* Returns : none*/void MAX7219_SendByte (Byte dataout) Byte i; for (i=8;i0;i-) Byte mask=1(i-1);/mask是个掩码,取位使用 CLK=0;/MAX7219的位传入是在时钟的上升沿之前,所以在每发一位之前都要变

29、为低电平 if (dataout&mask) DATA=1; else DATA=0; CLK=1;/八个bit都传递完成后变为高电平,锁存 /* MAX7219_Write()* 描述: 向 MAX7219 写命令* Arguments : reg_number = register to write to* dataout = data to write to MAX7219* Returns : none未完 */void MAX7219_Write (Byte reg_number, Byte dataout) LOAD=0;/也是锁存上升沿之前的,发这两个字节之前要变为低电平 MAX

30、7219_SendByte(reg_number);/发送寄存器地址 MAX7219_SendByte(dataout);/发送数据 LOAD=1;/变为高电平,锁存/* MAX7219_DisplayChar()* 描述: 使某一位显示一个数字* Arguments : digit = digit number (0-7)* character = character to display (0-9, A-Z)* Returns : none*/void MAX7219_DisplayChar(Byte digit, Byte character) MAX7219_Write(digit,

31、character);/* MAX7219_Clear()* 描述: 清除所有位的显示* Arguments : none* Returns : none*/void MAX7219_Clear (void) Byte i; for (i=1; i0;i-)for(j=248;j0;j-);/* GetHostStartKey()* Description: 取得主持人开始按键的键值* Arguments : none* Returns : 1-主持人按键; 0-主持人未按键*/Bool GetHostStartKey (void) if (HOST_START =1) return 0; e

32、lse Delay10ms ();/如果发现主持人按键接通,要先延时100us,防止抖动 if (HOST_START=1) return 0; else return 1;/延时时候还是接通,则判断为该键确实按下 /* GetHostCancelKey()* Description: 取得主持人取消按键的键值* Arguments : none* Returns : 1-主持人按键; 0-主持人未按键*/Bool GetHostCancelKey (void) if (HOST_CANCEL =1) return 0; else Delay10ms ();/如果发现主持人按键接通,要先延时1

33、00us,防止抖动 if (HOST_CANCEL =1) return 0; else return 1;/延时时候还是接通,则判断为该键确实按下 /* GetCounter* Description: 取得预先设置的倒计时时间* Arguments : none* Returns : none*/void GetCounter(void) beginNum=1;/在所有开关都没有拨动的时候倒计时为1秒,比设置为0秒要好 intrCounter=20;/每一秒对应的中断次数为20次 if (SWITCH1_3=1) beginNum+=3; if (SWITCH2_2=1) beginNum

34、+=2; if (SWITCH3_2=1) beginNum+=2; if (SWITCH4_1=1) beginNum+=1; /以上判断语句为判断拨码开关状态 intrCounter=20*beginNum;/计算总扫描次数/* GetPressed* Description: 从P2口连接抢答端的四位来判断抢答情况* Arguments : Byte KeyState-P2 state* Returns : 抢答端的号码 ; 0-没人抢答*/Byte GetPressed(Byte KeyState) Byte key;/记录抢答端的号码 KeyState&=0xf0;/取P1口的低四位

35、 switch (KeyState) case 0xf0: key=0;break;/全高,无人抢答 case 0xe0: key=1;break;/只有P1.1,key1抢答 case 0xd0: key=2;break;/只有P1.2,key2抢答 case 0xb0: key=3;break;/只有P1.3,key3抢答 case 0x70: key=4;break;/只有P1.4,key4抢答 /* switch (KeyState) case 0x00: key=0;break;/全高,无人抢答 case 0x01: key=1;break;/只有P1.0,key1抢答 case 0

36、x02: key=2;break;/只有P1.1,key2抢答 case 0x04: key=3;break;/只有P1.2,key3抢答 case 0x08: key=4;break;/只有P1.3,key4抢答 */ /上面是在用高电平来判断抢答状态时的程序,经证明不知道为何无效 return key; /* GetPressedWireless* Description: P2口的高四位于Pt2272接受模块相连,该方法用来判断无线抢答序号* Arguments : Byte KeyState-P2 state* Returns : 抢答端的号码 ; 0-没人抢答*/Byte GetPr

37、essedWireless(Byte KeyState) Byte key;/记录抢答端的号码 KeyState&=0xf0;/取P2口的高四位 /* switch (KeyState) case 0x0f: key=0;break;/全高,无人抢答 case 0x0e: key=1;break;/只有P1.1,key1抢答 case 0x0d: key=2;break;/只有P1.2,key2抢答 case 0x0b: key=3;break;/只有P1.3,key3抢答 case 0x07: key=4;break;/只有P1.4,key4抢答 */ switch (KeyState) c

38、ase 0x00: key=0;break;/全低,无人抢答 case 0x10: key=1;break;/只有P1.0,key1抢答 case 0x20: key=2;break;/只有P1.1,key2抢答 case 0x40: key=3;break;/只有P1.2,key3抢答 case 0x80: key=4;break;/只有P1.3,key4抢答 return key; /* IT0_Init* Description: 初始化计时器T0的状态* Arguments : none* Returns : none*/void IT0_Init(void) TMOD=0x21;/设

39、置T0在方式1下工作,同时还要保证T1,也就是波特率所学的定时器的正常工作 #ifdef CLOCK_FREQUENCY_12M/对使用哪种晶振进行条件编译 TH0=0x3C;/12M晶振时的装入值 TL0=0xAF; #else TH0=0x4C;/11.0529M晶振时装入值 TL0=0x00; #endif ET0=1;/使T0中断可以溢出 EA=1;/开启总中断 TF0=0;/溢出位清零 TR0=1;/开启T0/* Timer0_Overflow() interrupt 1* Description: 中断溢出服务程序, 采用的是中断方式1, 后面最好不加using选择寄存器组以免与系

40、统用在主程序的寄存器冲突* Arguments : none* Returns : none*/void Timer0_Overflow() interrupt 1 static Byte times=20;/溢出次数,用20次中断来判断1秒 /这里存在重大bug,到由于有相应而停止Timer0后,再次启用时,这里的second没有回归原值 if (needResetTimes=1) times=20; needResetTimes=0;/已重设,不需要再次重新设置溢出次数 #ifdef CLOCK_FREQUENCY_12M/对使用哪种晶振进行条件编译 TH0=0x3C;/12M晶振时的装入值 TL0=0xAF;/这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms #else TH0=0x4C;/11.0529M晶振时装入值 TL0=0x00;/同理,这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms #endif times-; intrCounter-; /* 原来使用的方法 if (times=0)/每隔一秒的操作 MAX7219_DisplayChar(DIG_2,code_table-showNum); /要避免用

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!