10.四路抢答器 数码管显示

  1. /*
  2.  ***********************************************************************************************
  3.  * Cool51
  4.  * 51开发板例程
  5.  *
  6.  *
  7.  * 文件名称:“main.c”
  8.  * 摘 要:四路抢答器
  9.  * 作 者:Rays_ele
  10.  *
  11.  * 当前版本:1.0
  12.  * 完成日期:2011/04/27
  13.  * 版权所有:Rays - Copyright (C) 2011
  14.  *
  15.  ***********************************************************************************************
  16.  */

  17. /*包含必要的头文件*/
  18. #include<reg52.h>//开发51单片机必须包含51单片机的头文件,该文件定义了51单片机内部寄存器的地址
  19. /*常用宏定义*/
  20. #define uchar unsigned char
  21. #define uint unsigned int
  22. /*程序接口定义*/
  23. //数码管的段码在原理图上已经和P0口相接,即P0.0对应数码管的a段,P0.1对于b段,依此类推,简单表示如下
  24. #define LED P0
  25. //LED_a-------P0.0
  26. //LED_b-------P0.1
  27. //LED_c-------P0.2
  28. //LED_d-------P0.3
  29. //LED_e-------P0.4
  30. //LED_f-------P0.5
  31. //LED_g-------P0.6
  32. //LED_s-------P0.7
  33. //下面是数码管的位定义,也就是数码管的公共端,具体电路讲解见Cool51原理图,该引脚为低电平即选通该位数码管
  34. sbit LED_1=P2^0;//LED_1-------P2.0
  35. sbit LED_2=P2^1;//LED_2-------P2.1
  36. sbit LED_3=P2^2;//LED_3-------P2.2
  37. sbit LED_4=P2^3;//LED_4-------P2.3

  38. //LED模拟电磁铁
  39. sbit alarm = P2^6; //抢答成功蜂鸣器响

  40. //4个独立按键引脚定义
  41. sbit user1=P1^0;//第一个按键
  42. sbit user2=P1^1;//第二个按键
  43. sbit user3=P1^2;//第三个按键
  44. sbit user4=P1^3;//第四个按键

  45. /*全局变量定义部分*/
  46. unsigned char code LED_Code[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//共阳码
  47. // 0 1 2 3 4 5 6 7 8 9 灭 -
  48. unsigned char number[4]; //全局数据,此数据是多少,数码管自动显示多少,显示程序由中断调用,

  49. /*
  50. +---------------------------------------------------------------------------------------+
  51. |函数名称: Delay_ms |
  52. |---------------------------------------------------------------------------------------|
  53. |函数原型: void Delay_ms(uint ms) |
  54. |函数功能: 普通延时函数 |
  55. |入口参数: 延时时间,单位毫秒 |
  56. +---------------------------------------------------------------------------------------+
  57. */
  58. void Delay_ms(uint ms)
  59. {
  60.    uchar t;
  61.    while(ms--)
  62.    {
  63.    t=120;
  64.    while(t--);
  65.    }
  66. }
  67. /*
  68. +---------------------------------------------------------------------------------------+
  69. |函数名称: Speaker |
  70. |---------------------------------------------------------------------------------------|
  71. |函数原型: void Speaker(uint ms) |
  72. |函数功能: 蜂鸣器响函数,因蜂鸣器是无源蜂鸣器,要想响的话,需要在一个IO口给出方波即可 |
  73. |入口参数: 延时时间 |
  74. +---------------------------------------------------------------------------------------+
  75. */
  76. void Speaker(uint ms)
  77. {
  78.    uchar t;
  79.    EA=0;
  80.    while(ms--)
  81.    {
  82.    alarm=!alarm;
  83.    t=80;
  84.    while(t--);
  85.    }
  86.    EA=1;
  87. }
  88. /*
  89. +---------------------------------------------------------------------------------------+
  90. |函数名称: ShuMaGuan |
  91. |---------------------------------------------------------------------------------------|
  92. |函数原型: void ShuMaGuan(uchar *dat) |
  93. |函数功能: 数码管扫描显示程序,随意显示一个9999以内数据大小 |
  94. |入口参数: 要显示的0000-9999之间的数据,数据是多少,就显示多少 |
  95. +---------------------------------------------------------------------------------------+
  96. */
  97. void ShuMaGuan(uchar *dat)
  98. {
  99.    LED=LED_Code[dat[0]];//将dat的千位取出来,用千位数来索引LED_Code的对应段码,再将段码送到对应段码口上
  100.    LED_1=0;     //段码送出去后,再选通千位数码管的公共端,此时对应千位数码管会显示
  101.    Delay_ms(3);             //将显示延时一段时间,视觉暂留
  102.    LED_1=1;
  103.    LED=LED_Code[dat[1]];
  104.    LED_2=0;
  105.    Delay_ms(3);
  106.    LED_2=1;
  107.    LED=LED_Code[dat[2]];
  108.    LED_3=0;
  109.    Delay_ms(3);
  110.    LED_3=1;
  111.    LED=LED_Code[dat[3]];
  112.    LED_4=0;
  113.    Delay_ms(3);
  114.    LED_4=1;
  115. }

  116. /*
  117. +---------------------------------------------------------------------------------------+
  118. |函数名称: main |
  119. |---------------------------------------------------------------------------------------|
  120. |函数原型: void main(void) |
  121. |函数功能: 矩阵键盘读取键值 数码管显示 |
  122. |入口参数:|
  123. +---------------------------------------------------------------------------------------+
  124. */
  125. void main(void)
  126. {
  127. uchar i=0;
  128. uint temp=0;
  129. uchar error_times=0;
  130.     EA = 1;                //允许CPU中断
  131.     ET0 = 1;             //定时器0中断打开
  132.     TMOD = 0x1;            //设定时器0为模式1,16位模式
  133.     TH0=0xE1;
  134.     TL0=0xDF;            //设定时值
  135.     TR0 = 1; //启动定时器

  136.    while(1)
  137.   {
  138.     alarm=0;
  139.        number[0]=11;
  140.     number[1]=11;
  141.     number[2]=11;
  142.     number[3]=11;
  143.    user1=1; //将第一个独立按键设置为输入
  144.    user2=1; //将第二个独立按键设置为输入
  145.    user3=1; //将第三个独立按键设置为输入
  146.    user4=1; //将第四个独立按键设置为输入
  147.    while(user1&&user2&&user3&&user4); //同时检测4个输入,是否有按键按下,按下则为0,跳出循环
  148.    if(user1==0)
  149.     number[2]=1;
  150.    if(user2==0)
  151.     number[2]=2;
  152.    if(user3==0)
  153.     number[2]=3;
  154.    if(user4==0)
  155.     number[2]=4;
  156.     Speaker(500);      //已经抢答成功,蜂鸣器响一下
  157.     Delay_ms(1000);//延时,延时过后进入下一次抢答状态
  158.   }
  159. }
  160. //定时器0中断外理中调用数码管显示程序
  161. /*
  162. +---------------------------------------------------------------------------------------+
  163. |函数名称: Timer0_int |
  164. |---------------------------------------------------------------------------------------|
  165. |函数原型: void Timer0_int(void) interrupt 1 |
  166. |函数功能: 定时器0溢出中断程序 |
  167. |入口参数:|
  168. +---------------------------------------------------------------------------------------+
  169. */
  170. void Timer0_int(void) interrupt 1
  171. {
  172.     TH0=0xE1;
  173.     TL0=0xDF;            
  174.   TR0=0;
  175.   ShuMaGuan(number); //在这里调用,实时显示number的值
  176.   TR0=1;
  177. }
阅读(570) | 评论(1) | 转发(0) |
0

上一篇:用CXA20106制作2CM-400CM的超声波(已出实物)

下一篇:11 按键控制单机转与停

相关热门文章
  • 傻瓜SEO:大家都是SEO好手...
  • 精子发黄真的影响生育?...
  • 戒烟、控制三高、多念书,可预...
  • VxWorks调试技巧
  • 揭秘“养”男人的食物...
  • shell中字符串操作
  • shell中的特殊字符
  • linux设备驱动归纳总结...
  • stagefright与opencore对比
  • linux守护进程的几个关键地方...
  • 现在的博客积分不会更新了吗?...
  • shell怎么读取网页内容...
  • ssh等待连接的超时问题...
  • curl: (56) Recv failure: Con...
  • CACTI 不能安装WINE,怎么办?...
给主人留下些什么吧!~~

网络安全服务2011-07-11 10:44:58

LED,呵呵

回复 | 举报
评论热议

你可能感兴趣的:(嵌入式)