- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IO口编程
IO编程,该开发板使用了573锁存器,经过P2口的5,6,7位连结3-8译码器,扩展出了8
个口,其中4个口分别连结4个573锁存器,这里以LED的锁存器来举例:
原理图573:
剖析代码:
P2=((P20xlf)|0x80);
其中Oxlf=OOOlllll,P2与Oxlf进行与运算,高三位清零,其余位保
持原来状态,不改变,即把控制3-8译码器的高三位留出来:
接着再或上0x80;容易发现0X80=1000OOOO;或运算,与l或结果为l,
与0或结果不变,所以或上0x80只要看P2的高三位,则高三位为100,对应3-8译码器的话,P2人
7=l;P2人6=0;P2人5=0;
所以输出Y4=0;Y4再经过与非运算,看下列图示:
则输出Y4C=l;即LED对应的锁存器的片选信号被选中,锁存器打通,接下来就能够
对P0口进行操作,操作完之后,
P2=P20xlf;P2高三位直接清零,此时Y4C=0,则把锁存器锁上了。
近似的方法,数码管、蜂鸣器等都是如此操作,
选中锁存器代码:
P2=((P20x1f)|(这里填对应锁存器的位移号))。
二、数码管动向扫描和准时器
数码管显示分为段选和位选,数码管定义和显示函数:
Codeunsignedchartab[]
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsignedchardspbuf[]={10,10,10,10,10,10,10,10};
unsignedchardspcom=0;
voiddisplay( )
{
段选,消隐
P2=((P20x1f)|0xe0);
P0=0xff;
P2=P20x1f;
位选
P2=((P20x1f)|0xc0);
P0=(1dspcom);
P2=P20x1f;
段码输入
P2=((P20x1f)|0xe0);
P0=tab[dspbuf[dspcom]];
P2=P20x1f;
if(++dspcom==8)
dspcom=0;dspcom每次自增1,1对应二进即把1每次向左移,每次都比上一次多移一位,直至8位移完,对应8个数码管。
准时器配置:
这里只要记着准时器的配置,知道怎么使用就能够了。首先有两个准时器,T0和T1,(也有的单
片机有T2),准时器有
4种工作方式0,1,2,3
;其中最常用的是方式
1(16位),其次是方式2
(8位自动重装,串口通讯中止会用到)。
准时器需要配置:TMOD|=0x01;配置成使用准时器
0,工作方式为1;同理使用准时器
1工作方式1:
TMOD|=0x10;则同时使用两个准时器且工作方式
为1,那么能够:TMOD|=0x11
;
准时器1配置成工作方式
2:TMOD|=0x20;
接着配置(以准时器0
举例):
TH0=(65535-2000
)/256;//配置初值
TL0=(65535-2000
)%6;
ET0=1;
TR0=1;//准时0中止
EA=1;//总中止
准时器1也是同理的,只可是0要改成1.
接着准时中止函数和优先级:
准时器0
voidisr_timer_0(void)interrupt1//默认中止优先级1
TH0=(65536-2000)/256;
TL0=(65536-2000)%6;//准时器重载
display( );
}
准时器1:
voidisr_timer_1(void)interrupt3//默认中止优先级3
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%6;//准时器重载
display( );
}
注意:准时器0优先级为1,准时器1为3,串口中止优先级为4,总合有5个中止
源,后边还会介绍外部中止和串口中止。
数码管动向扫描,显示函数放在准时中止函数里面,2ms扫一次是最稳定的!!
三、矩阵键盘矩阵键盘需要死记了!这里不再讲独立键盘。第二种单片机键盘扫描代
码(没有消抖):
sfrP4A4=0xC0;
键盘定义
sbitr1=P3A0;//4行
sbitr2=P3A1;
sbitr3=P3A2;
sbit「4=卩3人3;
//4列
sbitc1=P4A4;
sbitc2=P4A2;
sbitc3=P3A5;
sbitc4=P3A4;
读取矩阵键盘键值
unsignedcharkey_scan( )
{
unsignedcharkey_value;
r1=0;
r2=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1)key_value=0;
elseif(!c2)key_value=1;
elseif(!c3)key_value=2;
elseif(!c4)key_value=3;
r2=0;
r1=r3
文档评论(0)