没有合适的资源?快使用搜索试试~ 我知道了~
CT107D编程手册.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 166 浏览量
2023-11-05
22:32:06
上传
评论 1
收藏 561KB PDF 举报
温馨提示
试读
16页
CT107D编程手册.pdf
资源推荐
资源详情
资源评论
一、 IO 口编程
IO
编程,该开发板使用了
573
锁存器,通过
P2
口的
5,6,7
位连接
3-8
译码器,扩展出了
8
个
口,其中
4
个口分别连接 4 个 573 锁存器,这里以 LED 的锁存器来举例:
原理图 5 7 3:
分析代码:
P2=((P2 & 0xlf)|0x80);
其中 Oxlf = OOOl llll, P2 与 Oxl f 进行与运算, 高三位清零,其余位保
持原来状态,不改变,即把控制 3-8 译码器的高三位留出来:
接着再或上 0x80; 容易发现 0
X
80=1000 OOOO;或运算,与 l 或结果为 l,
与 0 或结果不变,所以或上 0x8 0 只需看 P2 的高三位, 则高三位为 10 0, 对应 3-8
译码器的话,P2 人 7=l;P2 人 6 = 0;P2 人 5 = 0;
所以输出 Y4 = 0;Y4 再经过与非运算,看下图示:
则输出 Y4C=l;即 LED 对应的锁存器的片选信号被选中, 锁存器打通,接下来就可以
对 P0 口进行操作,操作完之后,
P2=P2 & 0xlf;P2 高三位直接清零,此时 Y4C=0,则把锁存器锁上了。
类似的方法,数码管、蜂鸣器等都是如此操作,
选中锁存器代码:
P2=
((
P2&0x1f
)
|
(这里填对应锁存器的位移号))。
二、 数码管动态扫描和定时器
数码管显示分为段选和位选,
数码管定义和显示函数:
Code unsigned char tab[] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned chardspbuf[]={10,10,10,10,10,10,10,10};
unsigned chardspcom=0;
void display()
{
//
段选,消隐
P2=((P2&0x1f)|0xe0);
P0=0xff;
P2=P2&0x1f;
// 位选
P2=((P2&0x1f)|0xc0);
P0=(1<<dspcom);
P2=P2&0x1f;
// 段码输入
P2=((P2&0x1f)|0xe0);
P0=tab[dspbuf[dspcom]];
P2=P2&0x1f; if(++dspcom==8)
dspcom=0;
}
注意:这里
1
左移
dspcom
位,刚开始
dspcom=0
,则
1
左移
dspcom
位依旧为
1
,接着
dspcom 每次自增 1,1 对应二进制
00000001 ,即把 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
void isr_timer_0(void) interrupt1 //
默认中断优先级
1
{
TH0= (65536-2000)/256;
TL0= (65536-2000)%6; //
定时器重载
display();
}
定时器 1:
voidisr_timer_1(void) interrupt 3 //
默认中断优先级
3
{
TH0= (65536-2000)/256;
TL0= (65536-2000)%6; //
定时器重载
display();
}
注意:定时器
0
优先级为
1
,定时器
1
为
3
,串口中断优先级为
4
,
总共有
5
个 中断源,后面还会介绍外部中断和串口中断。
数码管动态扫描,显示函数放在定时中断函数里面,
2ms
扫一次是最
稳定的!!
三、 矩阵键盘
矩阵键盘需要死记了!这里不再讲独立键盘。
第二种 单片机 键盘扫描代码 ( 没有消抖 ) :
sfrP4
A
4=0xC0;
// 键盘定义
sbitr1=P3A0; //4
行
sbit r2=P3A1;
sbit r3=P3A2;
sbit r4=P3A3;
//4
列
sbit c1=P4A4;
sbit c2=P4A2;
sbit c3=P3A5;
sbit c4=P3A4;
// 读取矩阵键盘键值
unsigned charkey_scan()
{
unsigned char key_value;
r1=0;
r2=r3=r4=1;
c1=c2=c3=c4=1
;
if(!c1) key_value=0; else if(!c2) key_value=1; else if(!c3) key_value=2; else if(!c4) key_value=3;
r2=0;
r1=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=4; else if(!c2) key_value=5; else if(!c3) key_value=6; else if(!c4) key_value=7;
r3=0;
r2=r1=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=8; else if(!c2) key_value=9; else if(!c3) key_value=10; else if(!c4) key_value=11;
r4=0;
r2=r3=r1=1;
c1=c2=c3=c4=1; if(!c1) key_value=12; else if(!c2) key_value=13; else if(!c3) key_value=14; else
if(!c4) key_value=15;
return key_value;
}
四、 串口通讯和串口中断 串口中断配置只需记住几个 寄存器 就行了, 初始化:
SCON =0x50; //
串口配置成模式
1 TMOD|=0x20;//
定时器
1
,方式
2,8
位自动重装
TH1=256-
(unsigbedchar)(SYSTEMCLOK/BAUDRATE/384+0.5);//
ES=1; //
串口中断打开
TR1=1; //
启动定时器
1 EA=1; //
总中断打开
这里必须使用定时器 1 ,不能用定时器 0. 下面是模块化的 函
数 : void Uart_Init()
{
SCON = 0x50; TMOD |=0x20; TH1=256-(SYSREMCLOCK/BAUDRATE/384+0.5);
ES=1; TR1=1;
EA=1;
}
void UartSend(unsignedchar*pBuff,int length)
{
unsigned charc; int i=0;
for(i=0;i
{
c=pBuff
; SBUF=c; while(TI==0); TI=0;
} }
接收数据可以这样写: 定义全局变量:
unsigned charuart_buf[100];//
串口缓冲区
unsignedint
uart_Count=0;//
串口数据长度
void uart_inte()interrupt 4
{
unsigned char c;
if(RI) {
RI=0;
定时初值
剩余15页未读,继续阅读
资源评论
a66889999
- 粉丝: 39
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功