找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4462|回复: 0
打印 上一主题 下一主题
收起左侧

T0工作方式2计数数码管显示

[复制链接]
跳转到指定楼层
楼主
ID:71259 发表于 2014-12-30 01:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint x;
  5. sbit P34=P3^4;  //T0的控制管脚
  6. uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段码表
  7. void delay1ms(uchar n)    //1ms基准延时
  8. {
  9. uchar i;
  10. while(n--)
  11.   for(i=0;i<125;i++);     
  12. }

  13. void display(uint x)     //显示函数
  14. {
  15. P2=0xdf;     //DS5点亮
  16. P0=tab[x/100];    //显示百位
  17. delay1ms(5);
  18. P2=0xbf;    //DS6点亮
  19. P0=tab[x%100/10];   //显示十位
  20. delay1ms(5);
  21. P2=0x7f;      //DS7点亮
  22. P0=tab[x%10];     //显示个位
  23. delay1ms(5);
  24. }

  25. void main()
  26. {
  27. TMOD=0x06;           //0000 0110 使用计数器T0的工作方式2   自动重装
  28. EA=1;                   //开总中断
  29. ET0=1;               //允许计时器T0的中断
  30. EX0=1;              //允许外中断INT0
  31. IT0=1;             //INT0为负跳变触发
  32. TR0=1;             //启动T0
  33. TH0=TL0=255;        //计数器T0高8位赋值255
  34.                      //按键一下就溢出中断,转中断服务程序

  35. while(1){    //无限循环,不停的将TL0计数结果送向P1口
  36.   //x=TL0
  37.   display(x);
  38. }

  39. }

  40. void clear0() interrupt 0     //INT0中断函数
  41. {
  42. x=0;
  43. }

  44. void key_counter() interrupt 1  //定时器中断
  45. {
  46. if(P34==0){
  47.   delay1ms(20);      //消陡
  48.   if(P34==0){
  49.    x=(x+1)%1000;
  50.   }
  51. }

  52. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表