1892|4

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

再次求帮忙 [复制链接]

虽然定时器我搞懂了,但是这个问题我还是解决不了,如下:使用定时器计数,一秒加1,使用数码管
显示1~999可以使用中断。我的是stc12c5a60s2
此帖出自51单片机论坛

最新回复

我修改了下   你试试  我没硬件试 应该没什么问题了 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; } }  详情 回复 发表于 2018-4-18 17:00
点赞 关注
 

回复
举报

875

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
你说的什么意思呀?用中断你把中断设置好然后打开不就行,我搞不明白,你为什么要用中断,你就一个任务,你要中断干嘛?
此帖出自51单片机论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我新手,我也不太明白,这个只是别人出的题目,这是我编的,不知哪里错了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};void main(){ unsigned int cnt=0; unsigned long sec=0; int i=0; P11=0; TMOD=0X01; TH0=0XF5; TL0=0X96; TR0=1; while(1) { TF0=0;TH0=0XF5;TL0=0X96;cnt++;if(cnt>=1000){cnt=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];}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++;P0=num[5];break;}}}
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

4
 
如果只是数码管,显示一秒加一。没有别的功能。可以用延时实现。定时器都不用。
要是有别的功能。用定时器计时。初始化定时器,使能定时器。定时器参数进行适当配置。一秒中断一次或多次都行。用变量正确记录就行了。主循环,根据变量的值,就知道,经过的时间。在一秒时,改变显示。逻辑理清楚,程序就好写了。
此帖出自51单片机论坛
 
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

5
 
我修改了下   你试试  我没硬件试 应该没什么问题了
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单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表