|
使用下面的代码,通过定时器生成一个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);
}
}
} |
|