找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机每隔1秒计数加1,数码管显示 程序

查看数: 3567 | 评论数: 10 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-4-5 22:00

正文摘要:

单片机源程序如下: #include"reg52.h" #define uchar unsigned char #define uint unsigned int /*****数码管位选****/ sbit SMG_A = P2^2; sbit SMG_B = P2^3; sbit SMG_C = P2^4; /****数码管码表** ...

回复

ID:603753 发表于 2022-4-25 10:06
如果是11.0592m晶振,初值就是46080

晶振11.0592M:
11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。
65536-46080=19456(4c00)
TH0=0x4c,TL0=0x00

ID:863362 发表于 2022-4-25 08:11
gongnn 发表于 2022-4-24 15:38
void Timer0Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式

我也是刚搞清楚,如果是11.0592m晶振,初值就是46080,如果是12m晶振,初值就是50000
ID:220661 发表于 2022-4-24 15:38
sonique0371 发表于 2022-4-22 08:11
我问的就是基础值为什么不是50000,而是46080?

void Timer0Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x00;                //设置定时初始值
        TH0 = 0x4C;                //设置定时初始值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
ID:1010435 发表于 2022-4-24 10:42
数码管位选用Switch函数
ID:71955 发表于 2022-4-23 12:06
本人很菜,请教下各大侠,数码管位选为啥只有三个位?
ID:65369 发表于 2022-4-22 09:04
用Delay,好占用资源的,同时在定时器里面选择不是更好,一般都是在定时器里面刷新的
ID:863362 发表于 2022-4-22 08:11
lzzasd 发表于 2022-4-20 09:16
楼主使用的定时器中断来计时的    定时器是向上累加溢出的   所以 定时=65536--基础值

我问的就是基础值为什么不是50000,而是46080?
ID:928284 发表于 2022-4-21 15:58
利用定时中断扫描数码管位显示,可以使程序更简单明了。
ID:514317 发表于 2022-4-20 09:16
sonique0371 发表于 2022-4-20 08:35
请问一下,初始值46080是怎么计算出来的?50毫秒不是应该就是50000吗?

楼主使用的定时器中断来计时的    定时器是向上累加溢出的   所以 定时=65536--基础值
ID:863362 发表于 2022-4-20 08:35
请问一下,初始值46080是怎么计算出来的?50毫秒不是应该就是50000吗?

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

Powered by 单片机教程网

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