找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机计数器源程序

[复制链接]
跳转到指定楼层
楼主
ID:243751 发表于 2017-12-28 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我上次实验做的计数器的源程序
能够在单片机机上实现运行的
希望大家多多指教
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char          //数据类型宏定义
#define uint unsigned int
#define out  P0                                  //IO端口定义
/*******共阳数码管 0 ,  1  ,2  ,3 , 4  ,5  ,6 , 7,  8  ,9 ******/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};

uint i = 0;         //全局变量
uint cnt=0;
/***********主函数*******************************************************/
void main(void)
{
        int j;

        TMOD=0x15;                          // 定时器0工作于计数方式,工作方式1,16位计数
                                            // 定时器1工作于定时方式,工作方式1,16位定时
        TH0=0;                                                                // 清零计数器
        TL0=0;
        TH1=0x4C;                                                        // 12M晶振工作下,定时50ms
        TL1=0x00;
        TR0=1;                                                                // 启动定时器0
        TR1=1;                                                                // 启动定时器1
        IE=0x88;                                                        // 打开定时中断1和总中断
        while(1)
        {                         
                P2=0x00;                                                  // 输出百位
                out = seg[cnt/100];       
                P2 = 0x01;
                for(j=0;j<100;j++);

                P2=0x00;
                out = seg[cnt%100/10];                        // 输出十位
                P2 = 0x02;         
                for(j=0;j<100;j++);          

                P2=0x00;                                               
                out = seg[cnt%10];                                 // 输出个位
                P2 = 0x04;
                for(j=0;j<100;j++);
        }                  
}

/***********计数器T0中断处理函数******************************************/
void Timer1_ISR() interrupt 3
{
        static char j = 0;
         i++;
        TH1=0x4C;                                                   // 重设定时器值,50ms @ 12MHz XTAL
        TL1=0x00;
        if(++j == 20)                                           // 50ms * 20 = 1S
        {                          
                j = 0;
                i = (TH0 << 8) | TL0;                   // 1S内的计数值
                cnt=i;
                i=0;
                TH0 = 0;                                           // 清零计数
                TL0 = 0;         
        }
}

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

使用道具 举报

沙发
ID:274277 发表于 2018-1-10 14:26 | 只看该作者
那要接那个口
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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