找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7453|回复: 0
收起左侧

单片机用定时器中断来扫描数码管

[复制链接]
ID:80436 发表于 2015-5-22 00:26 | 显示全部楼层 |阅读模式

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;t;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
num=0;
t=0;
        TMOD=0X01;//设置定时器工作方式为1TH0=(65536-5000)/256;//高八位 定时器装初值TL0=(65536-5000)%256;//低八位 定时器装初值、、50毫秒ET0=1;//开定时器0中断TR0=1;//启动定时器0EA=1;//总中断打开EX0=1;//外部中断打开
//EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
TR1=1;
P2=0xfe;
while(1)
{
if(t==100)
   {
t=0;
num++;

P0=table[num];//此处有问题。num自增到10后会出现乱码。数组越界了
}
}
}


void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
}
次数X机器周期Tcy=时间T,50*(1/12)*12=50(ms)、一次中断为50毫秒。中断二十次就是一秒了。
机器周期=1/12  即12分之1的震荡周期。振荡周期取决于你用的是多少M的晶振,我用的是12M,越来越觉的STC的51单片机很水,性能很水,稳定性也很水、工业用不合适,业余玩玩可以,便宜!难怪很多人做产品时宁愿用Atmel的单片机了。
利用中断20次来实现1秒钟的精确延时,比用delay函数当然更精确地的啦,最多就相差1微秒。一个机器周期的样子,在这鄙视下PLC的速度,呵呵,单片机的机器周期是1微秒级的,PLC机器周期是数十微秒。



回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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