专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
再次求帮忙
2019-03-24 17:03
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
1937
4
1174
虽然定时器我搞懂了,但是这个问题我还是解决不了,如下:使用定时器计数,一秒加1,使用数码管
显示1~999可以使用中断。我的是stc12c5a60s2 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
曹伟1993
1楼-- · 2019-03-25 03:14
你说的什么意思呀?用中断你把中断设置好然后打开不就行,我搞不明白,你为什么要用中断,你就一个任务,你要中断干嘛?
加载中...
努力嘉禾
2楼-- · 2019-03-25 03:45
精彩回答 2 元偷偷看……
加载中...
ienglgge
3楼-- · 2019-03-25 04:56
如果只是数码管,显示一秒加一。没有别的功能。可以用延时实现。定时器都不用。
要是有别的功能。用定时器计时。初始化定时器,使能定时器。定时器参数进行适当配置。一秒中断一次或多次都行。用变量正确记录就行了。主循环,根据变量的值,就知道,经过的时间。在一秒时,改变显示。逻辑理清楚,程序就好写了。
加载中...
该用户
4楼-- · 2019-03-25 08:04
我修改了下 你试试 我没硬件试 应该没什么问题了
unsigned char num[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
unsigned char buff[6]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
unsigned char j;//一秒时间中断标志位
void main(){
unsigned long sec=0;
TMOD=0X01;
TH0=0XF5;
TL0=0X96;
EA=1;//开中断
ET0=1;//开定时器0中断
TR0=1;
while(1) {
if(j==1){
j=0;
sec++;
buff[0]=num[sec%10];
buff[1]=num[sec/10%10];
buff[2]=num[sec/100%10];
buff[3]=num[sec/1000%10];
buff[4]=num[sec/10000%10];
buff[5]=num[sec/100000%10];
}
}
}
void time_0() interrupt 1
{
unsigned int i=0;
unsigned int cnt=0;
TH0=0XF5;
TL0=0X96;
cnt++;
if(cnt>=1000){
cnt=0;
j==1;
}
P0=0xFF;//消影
switch(i){
case 0:P22=0;P21=0;P20=0;i++;P0=num[0];break;
case 1:P22=0;P21=0;P20=1;i++;P0=num[1];break;
case 2:P22=0;P21=1;P20=0;i++;P0=num[2];break;
case 3:P22=0;P21=1;P20=1;i++;P0=num[3];break;
case 4:P22=1;P21=0;P20=0;i++;P0=num[4];break;
case 5:P22=1;P21=0;P20=1;i=0;P0=num[5];break;
default: break;
}
}
加载中...
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
要是有别的功能。用定时器计时。初始化定时器,使能定时器。定时器参数进行适当配置。一秒中断一次或多次都行。用变量正确记录就行了。主循环,根据变量的值,就知道,经过的时间。在一秒时,改变显示。逻辑理清楚,程序就好写了。
unsigned char num[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
unsigned char buff[6]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
unsigned char j;//一秒时间中断标志位
void main(){
unsigned long sec=0;
TMOD=0X01;
TH0=0XF5;
TL0=0X96;
EA=1;//开中断
ET0=1;//开定时器0中断
TR0=1;
while(1) {
if(j==1){
j=0;
sec++;
buff[0]=num[sec%10];
buff[1]=num[sec/10%10];
buff[2]=num[sec/100%10];
buff[3]=num[sec/1000%10];
buff[4]=num[sec/10000%10];
buff[5]=num[sec/100000%10];
}
}
}
void time_0() interrupt 1
{
unsigned int i=0;
unsigned int cnt=0;
TH0=0XF5;
TL0=0X96;
cnt++;
if(cnt>=1000){
cnt=0;
j==1;
}
P0=0xFF;//消影
switch(i){
case 0:P22=0;P21=0;P20=0;i++;P0=num[0];break;
case 1:P22=0;P21=0;P20=1;i++;P0=num[1];break;
case 2:P22=0;P21=1;P20=0;i++;P0=num[2];break;
case 3:P22=0;P21=1;P20=1;i++;P0=num[3];break;
case 4:P22=1;P21=0;P20=0;i++;P0=num[4];break;
case 5:P22=1;P21=0;P20=1;i=0;P0=num[5];break;
default: break;
}
}
一周热门 更多>