迪文科技论坛

 找回密码
 立即注册
搜索
查看: 173|回复: 4

【提问】无法通过定时器生成一个随机数

[复制链接]

2

主题

1

回帖

101

积分

注册会员

Rank: 2

积分
101
发表于 2025-4-21 15:14:31 | 显示全部楼层 |阅读模式
使用下面的代码,通过定时器生成一个0到23的随机数,当按键按下一次,就将该数显示在迪文屏上。经过测试发现无法得到0到23的数
#include "sys.h"
#define XGUI_WIN_BTN_ADDR          0x3000
#define T0_PERIOD_1MS        0xBCCD        //1ms的定时周期

idata u32 count = 0;

//定时器0初始化
void timer0_init()
{
    //16位定时器工作模式
    TMOD &= 0xFC;
    TMOD |= 0x01;
    //定时周期为1ms
    TH0 = (u8)(T0_PERIOD_1MS>>8);
    TL0 = (u8)T0_PERIOD_1MS;
    ET0 = 1;//使能定时器0中断
    EA = 1;//使能总中断
    TR0 = 1;//启动定时器0
}

//定时器0的中断服务程序
void timer0_isr()    interrupt 1
{
    static idata u16 cnt_1ms = 0;
   
    //重新装载周期值
    TH0 = (u8)(T0_PERIOD_1MS>>8);
    TL0 = (u8)T0_PERIOD_1MS;
   
   
        count++;//进行自增1的操作


    //TF0 = 0;硬件会自动清除中断标志位的
}

void main(void)
{   
    u16 btn_val,b,a;
    sys_init();//系统初始化
    timer0_init();//定时器0初始化

         a=count%24;
    while(1)
    {   b=a;
            sys_read_vp(XGUI_WIN_BTN_ADDR    ,(u8*)&btn_val,1);
        if(btn_val==1)//说明按钮按下了
         {   

         sys_write_vp(0x2000,(u8*)&b,2);//把count计数器的值更新到界面上
             btn_val = 0;                          //清除按键值
              sys_write_vp(XGUI_WIN_BTN_ADDR    ,(u8*)&btn_val,1);
         }
    }
}
回复

使用道具 举报

0

主题

323

回帖

2313

积分

金牌会员

Rank: 6Rank: 6

积分
2313
发表于 2025-4-21 20:55:46 | 显示全部楼层
a=count%24;放在while循环内才行,现在啊放在while外面,值根本没更新。
回复

使用道具 举报

2

主题

1

回帖

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2025-4-22 14:40:05 | 显示全部楼层
紫狐 发表于 2025-4-21 20:55
a=count%24;放在while循环内才行,现在啊放在while外面,值根本没更新。

这个我已经修改了,但是得到的数值并不是0到23而是0到100的随机数,%符号好像没有用,我想请问一下这个是什么原因
回复

使用道具 举报

23

主题

167

回帖

1883

积分

金牌会员

Rank: 6Rank: 6

积分
1883
发表于 2025-4-22 15:13:23 | 显示全部楼层
sys_write_vp(0x2000,(u8*)&b,1);//把count计数器的值更新到界面上
                                           ^^
写入一个字,不是两个
回复

使用道具 举报

5

主题

19

回帖

402

积分

中级会员

Rank: 3Rank: 3

积分
402
发表于 7 小时前 | 显示全部楼层
跟楼主一样,%符号不好使
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-8-21 22:45 , Processed in 0.034978 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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