51单片机学习笔记

1、动态数码管:
用for循环加switch语句
来选择是哪个LED亮
138译码器的0 1 2 3 4 5 6 7对应的 ABC接口是的数要是对应的二进制编码,对二求二进制时是 0 1 0所以 A = 0, B = 1, C = 0
用延时函数来使LED实现不同情况(常亮还是流水),延时函数要接P0归零消除重影(虽然我没看到重影,,,,因为数码管炸了,,,,)
2、独立按键
通过检测P30~3的高低电平来使单片机做出不同的反应,注意因为震荡性要在检测为0后延时1000(10ms),最后再延时while(!p3?)
3、矩阵键盘
先让高四位为0低四位为1检测是否还是0x0f,若不是,延时10ms,再用switch把矩阵键盘哪列的值赋一下,在高四位为1低四位为0,在进行判断用switch在
值上+0,+4,+8,+12
通过这些值传递给主函数,进行操作
4、8*8点阵
头文件要包含 intrins.h
P36,P35接口要先为0,这样在后面为高电平时才可以上沿,存数据,
for循环八次,先给P34赋值 (dat为传递的数)P3^4 = dat>>7
(未改dat的值)把第一个值赋过去,给高位赋(D7)在dat <<= 1
把第一个顶掉
然后让P36为1上沿把数据传给P35用两个_nop_函数延时,再把P36变为0
循环结束后在让P35为1把数据传给D0~7用两个_nop_函数延时在把P35变为0
由P0^7~0从左向右控制列
由D7~0从上到下控制行
若是哪个点亮则该点D为1其他为0,P0为0其他为1
// 无法进行位操作就对整体进行赋值
5、中断:
对于中断,都要编写一个初始化中断函数,配置中断。总允许位为EA
中断的优先级:INT0>T0>INT1>T1>串口
对应的中断号位 0 1 2 3 4
中断函数为:函数头处在()后加interrupt 中断号
6、外部中断:
外部中断允许位为EX?。中断请求标志位为IT?:分等于0和等于1
等于0是低电平触发中断,等于1是下降沿触发中断。INT0对应引脚为P3^2
INT1对应引脚为P3^3;
7、定时器\计数器:
内部中断允许为ET?(这里是要打开中断控制,等TR?也打开时定时器开始运作)
直接对TMOD初始化,用16进制,对应的功能
串口中断允许为为ES
两个寄存器TMOD与TCON
TMOD:高四位控制T1低四位控制T0,用16进制数给他初始化
GATE为门控位,GATE为0只需软件将TR?置1即可启动。为1还需INT0\1引脚为高电平才启动
C\T为模式选择,为0是定时模式,为1是计数模式
M1M0为工作方式设置一般是用01(16位定时\计数器)和10(八位自动重装定时\计数器)
TCON:高四位用来控制计数器的启动中断申请
TF?是中断请求标志,计数溢出时自动置1,中断结束后自动清0。可用作查询测试的标志
TR?运行控制位,只有置1时对应计数器才工作
TL0为低八位储存数的寄存器,TH0为高八位的寄存器,要将初始计数值写入这两个寄存器内
计数初值的计算方法:若为01方式则公式为初值 = 65536 - 时间/1us
若为10:初值 = 256 - 时间/1us
因为到256或65536才会发生溢出,差值就是初始值
(萌新第一次发博客,应该问题有很多,若各位大佬发现问题请联系我更改)

你可能感兴趣的:(51单片机)