摘要: 上一节,稀里糊涂地照着demo测试了定时计数的效果,但对内部和参数的控制还是不解,准备从基础原理学习定时计数器的工作原理和方式。8051单片机的结构是由一内部总线连接各功能模块,通过特殊功能寄存器(SFR)集中控制,不同型号引脚定义和SFR定义不同,因此一个功能模块,可以从相关引脚功能和相关SFR功能学习了解该模块。以8051为例,其定时计数模块的特点有2个16位定时计数器,最大计数范围:0H-FFFFH;相关的SFR:TMOD、TCON、TH0、TL0、TH1、TL1;相关引脚:T0、T1、INT0、INT1;4种工作方式;其中,T0、T1做为计数脉冲输入,定时方式时不用,作I/O用,对应P 阅读全文
posted @ 2014-03-15 12:33 彩蛋 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 通过前面的定时器理论了解到,使用一个定时器,要经过下面四步:1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01);2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数);3、如果工作在中断方式,则需要开定时器/计数器的中断TCON中的标志位:TF0/TF1=0/1;4、启动定时器/计数器:TR0/TR1=1;//1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01);//2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数);//3、如果工作在中断方式, 阅读全文
posted @ 2014-03-11 22:59 彩蛋 阅读(7449) 评论(0) 推荐(0) 编辑
摘要: 定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件,晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒;12MHZ晶振内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒 阅读全文
posted @ 2014-03-11 22:05 彩蛋 阅读(986) 评论(0) 推荐(0) 编辑
摘要: #includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[10]; //存储显示值的数组void Delay(unsigned int t); // 阅读全文
posted @ 2014-03-11 21:51 彩蛋 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 数码管闪烁,利用一个布尔变量控制各数码管的显示值,为真(True)是赋对应的数值,为假(False)时熄灭,还是利用一定的时间间隔,在人眼的视觉暂留时间段内,快速的切换熄灭和点亮,可用下面的代码测试。#includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef 阅读全文
posted @ 2014-03-11 21:40 彩蛋 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 按照我的开发板,共阴极数码管共8个,也就是说,只能显示8位数字,0-99999999,当显示的数字不足8位时,需要将不显示的数码管熄灭即消隐,代码原理就是将存储显示值的数组变量中,不显示的位在P1口输出0(熄灭),以下显示0-9999四位有效数字为例,从第2位数码管开始,显示最多4位有效数字:#includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned 阅读全文
posted @ 2014-03-08 22:19 彩蛋 阅读(2755) 评论(0) 推荐(0) 编辑
摘要: 数码管的小数点单独有一位来控制,这就是物理世界和数字世界的神奇之处,数码管用来显示数字和字母的led段有7个,再加上小数点共8个,正好对应一个字节的位数,这样使用单片机的一个口正好可以全部操作,通过http://www.cnblogs.com/coloregg/p/3565486.html 可以看到点是单独位来操作,比如显示2.,只需将数字2对应的二进制数第1位改为1即可,在实际中,我们将要带点显示的数字和0x80相或就可以,其原理如下:共阴极(1亮0灭): DPGF E DC B A 0101 1 0 1 1 = 0x5B 1 0 0 0 0... 阅读全文
posted @ 2014-03-03 21:56 彩蛋 阅读(4339) 评论(0) 推荐(0) 编辑
摘要: 累减是和累加相反的过程#includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void Delay(unsigne 阅读全文
posted @ 2014-03-03 21:32 彩蛋 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 同理0-9999累加的代码是#includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void Delay(unsi 阅读全文
posted @ 2014-03-03 21:24 彩蛋 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 实现0-999累加#includesbit LATCH1=P2^2;//段锁存sbit LATCH2=P2^3;//位锁存unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char TempData[8]; //存储显示值的全局变量void Delay(unsigned 阅读全文
posted @ 2014-03-03 21:16 彩蛋 阅读(248) 评论(0) 推荐(0) 编辑