数码管显示程序放在18b20的那个定时器或电机的那个定时器么
像下面的程序一样,数码管显示,已经该时间时相应的数码管闪烁都用了同一个定时器
要是C51系列的单片机你程序发来看能不能给你整合下我邮箱[email protected]
void timer0(void)interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
temp++;
if(key.index1)//被选择的时间闪烁
{
shan++;
if(shan==30) flag&=~(1<<(key.index1+1));
if(shan==60){flag=flag|(1<<(key.index1+1));shan=0;}
}
if(temp==10)
{
temp=0;
tmiao++;
if(press)tmiao--;
if(tmiao==10)
{
tmiao=0;
miao++;
if(miao==60)
{
fen++;miao=0;
if(fen==60)
{
shi++;fen=0;
if(shi==100)shi=0;
}
}
}
}
P3=tmiao;
switch(tt)
{
case 0:if(flag_miao){dis_shuma(5,miao%10);}tt=1;break;
case 1:if(flag_miao){dis_shuma(4,miao/10);}tt=2;break;
case 2:if(flag_fen){dis_shuma(3,fen%10);}tt=3;break;
case 3:if(flag_fen){dis_shuma(2,fen/10);}tt=4;break;
case 4:if(flag_shi){dis_shuma(1,shi%10);}tt=5;break;
case 5:if(flag_shi){dis_shuma(0,shi/10);}tt=0;break;
default:break;
}
}
B. 单片机缩写的英文全称及中文名称
单片机缩写的英文全称是Microcontrollers,中文名称就是单片机。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
(2)单片机flagt1扩展阅读:
单片机的单机应用的范围:
1、测控系统。 用单片机可以构成各种不太复杂的工业控制系统、自适应控制系统、数据采集系统等, 达到测量与控制的目的。
2、智能仪表。 用单片机改造原有的测量、控制仪表, 促进仪表向数字化、智能化、多功能化、综合化、柔性化方向发展。
3、机电一体化产品。单片机与传统的机械产品相结合, 使传统机械产品结构简化, 控制智能化。
4、智能接口。 在计算机控制系统, 特别是在较大型的工业测、控系统中, 用单片机进行接口的控制与管理, 加之单片机与主机的并行工作, 大大提高了系统的运行速度。
5、智能民用产品。 如在家用电器、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品中, 单片机控制器的引入, 不仅使产品的功能大大增强, 性能得到提高, 而且获得了良好的使用效果。
C. 单片机频率计
1.实验任务
利用51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。
2.电路原理图
见插图
3.程序设计内容
(1).定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。
(2).T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。
4.C语言源程序
/******************************************************************************
*定时器+计数器测频
*
*file:frequency.c
*name:zhzhchang
*time:2010.3.17
*V1.0
*blog:http://blog.csdn.net/zhzht19861011
*Nots:本程序定义6个数码管,经过实测,在200HZ~50KHZ时结果较准确,误差小于0.4%,
*50KHZ以上频率未进行测量.据资料表明,可以测量到120KHZ,本程序未证明.
*********************************************************************************/
#include<reg52.h>
bitint_flag;//定时器01S到标志位
unsignedcharvolatileint_count;//定时器0中断次数
unsignedcharvolatileT1count;//定时器1中断次数
unsignedcharcodedofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0123456789
unsignedlongsum;//1S内脉冲总个数
unsignedcharled[6];//LED显示缓存
///////////////软件延时/////////////
voiddelay(unsignedintcnt)
{
while(--cnt);
}
///定时器0初始化
voidinit_t0(void)
{
TMOD=(TMOD&0xF0)||0x01;//定时器0工作于方式1
TH0=(65536-50000)/256;//定时50ms
TL0=(65535-50000)%256;
}
//定时器1初始化
voidinit_t1(void)
{
TMOD=(TMOD&0x0F)|0x50;//timer1forcount
TH1=0x00;
TL1=0x00;
}
//显示
voiddisp(void)
{
unsignedchari;
for(i=0;i<6;i++)
{
P0=dofly[(led[i])];//取显示数据
P2=5-i;//取段码
delay(100);//扫描间隙延时,根据单片机调整,延时1ms即可
}
}
///////////////////////////////////////////////////////
voidmain(void)
{
EA=1;//开总中断
init_t0();//初始化定时器
init_t1();
TR0=1;//定时器开始工作
TR1=1;
ET0=1;//开T0中断
while(1)
{
if(int_flag==1)
{
int_flag=0;
sum=TL1+TH1*256+T1count*65536;//计算1秒内的脉冲个数
//以下将数据格式化,转成LED可显示的BCD码
led[0]=sum%10;//最低位
sum=sum/10;
led[1]=sum%10;//第二位
sum=sum/10;
led[2]=sum%10;
sum=sum/10;
led[3]=sum%10;
sum=sum/10;
led[4]=sum%10;
led[5]=sum/10;
int_count=0x00;
T1count=0;
TH1=0x00;
TL1=0x00;
TR1=1;
}
disp();
}
}
//定时器0中断服务程序
voidint_t0(void)interrupt1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
int_count++;
if(int_count==20)
{
TR1=0;
int_flag=1;
int_count=0x00;
}
}
//定时器1中断服务程序
voidint_t1(void)interrupt3
{
T1count++;
}
别说你的设计要求用汇编啊!!!
不过既然是课程设计,我这个只是给你参考,你自己一定要弄懂,变成自己的。我实测过,程序没问题,但用到你的硬件上可能需要改一下,因为你的硬件数码管不一定和我的硬件接法一样,但整体思路我都给你了。