单片机听课笔记1-8课(金沙滩2024年更新)(4)

2025-06-24

}

}

} P0 = 0XFF;//消除鬼影操作。 switch(i) { case 0:ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = ledbuff[0]; break; case 1:ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = ledbuff[1];break; case 2:ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = ledbuff[2];break; case 3:ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = ledbuff[3];break; case 4:ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = ledbuff[4];break; case 5:ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 = ledbuff[5];break; default:break; } }

6、 使用中断实现秒表程序(中断)

#include

sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;

unsigned char code LedChar[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};

unsigned char LedBuff[6]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

unsigned int cnt = 0; void main() {

unsigned long sec = 0;

ENLED = 0; ADDR3 = 1; TMOD = 0x01; TH0 = 0xFC; TL0 = 0x67; TR0 = 1; EA = 1; ET0 = 1;

while(1) {

if(cnt >= 1000) { cnt = 0; sec++; LedBuff[0] = LedChar[sec];

LedBuff[1] = LedChar[sec/10]; LedBuff[2] = LedChar[sec/100]; LedBuff[3] = LedChar[sec/1000]; LedBuff[4] = LedChar[sec/10000]; LedBuff[5] = LedChar[sec/100000]; } } }

unsigned char i = 0;

void InterruptTimer0() interrupt 1 {

TH0 = 0xFC; TL0 = 0x67; cnt++;

P0 = 0xFF;//消隐 switch(i) { case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1];break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2];break; case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3];break; case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4];break; case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5];break; default:break; } }

7、 数码管不亮的地方发暗,数码管鬼影怎么解决?秒表加1时,显示抖动怎么解决?

消除鬼影:见程序二上面黄色部分。 显示抖动:使用中断消除。

8、 中断优先级(固有优先级) 中断函数编号 0 1 2 3 4 5

中断名称 外部中断 T0 外部中断 T1 UART T2 中断标志位 IE0 TF0 IE1 TF1 TI/RI TF2/EXF2 中断使能位 EX0 ET0 EX1 ET1 ES ET2 中断向量地址 0x0003 0x000B 0x0013 0x001B 0x0023 0x002B 默认优先级 1(最高) 2 3 4 5 6 9、中断58分钟后。 进入中断条件:第一打开中断、符合中断条件 、中断入口正确。 10、 11、

中断使能寄存器:IE 可位寻址。关注:EA、ET0位。 中断向量地址:决定中断入口号 x*8 +3 = 中断向量地址。 定时器0:中断入口号1;定时器1,中断入口号3。

作业:

3、 彻底理解中断的原理和应用方法,关闭教程自己把本章节程序编写完毕,下载实践。 4、 尝试修改程序,只显示有效位

5、 尝试写一个从999999开始倒计时的程序,通过改用定时器T1的中断来完成。

Lesson 7 变量进阶与LED点阵(点阵部分需要完善) 1、 变量的作用域

(1) 局部变量:只在函数内部使用的变量 (2) 全局变量: 2、 全局变量的副作用:

A, 降低函数的独立性—修改,对任何一个函数的修改,都可能影响其他函数。 B, 降低函数的通用性—不利于函数重复调用

C, 降低程序的清晰度---每个函数执行,都可能改变全局变量的值。 D, 全局变量永久占据内存。

3、 原则:能用局部变量,就不用全局变量。

全局变量和局部变量同名,在局部变量作用域范围内,局部变量有效。 4、 变量的存储类别:

自动变量:函数中的局部变量,如不加static关键字修饰,都属于自动变量,也叫做动态变量。 静态变量:所有全局函数都属于静态变量,局部变量如果加了static 关键字修饰,也是静态变量。 5、 点阵取模软件的用法

A,新建图像:8*8,

B,模拟动画:放大格点值最大,画图,选中的点为灭,白色的为亮, C,修改图像;黑白反选,确定要显示的内容。 D,取模方式:C51格式。

E,参数设置: →其他选项→选择横向取模+

其他默认(选中:字节倒序(点阵第一行左侧DB0),保留、任何时候都)

F,基本操作:保存图像,打开图像,便于下次操作。 6、 显示汉字:需要至少16*16的显示屏。

7、 动态显示:例如,I ? u 可以新建一个8*40行的点阵。

(点阵显示部分重看之后待完善)

8、 左右移动方法一,图像侧过来,把板子侧过来就可以了。 9、 左右移动方法二:二维数组。 10、 Unsigned char a[2][3] = {{1,2,3},{4,5,6}};

Lesson 8 函数进阶与按键 一、单片机最小系统解析

1、电源:5V、3.3V两种;

数字电路电源:24V、12V、5V、3.3V、2.5V、1.8V

2、无源晶振(晶体):需接起振电容,不依赖电源电压,接好电路就工作;

有源晶振(振荡器):需接电源,输出端直接接XTAL1,依赖工作电压,适用高精度场合。 3、复位电路

上电复位:复位时间t = 1.2RC 故:t = 1.2*4.7K* 0.1*0.000001F = 564us, 大于两个机器周期约2us,故能起

到复位作用。

手动复位:人手按下按键的时间一般100ms以上,快的也有几十ms,故满足复位条件。

18欧的电阻作用是放电时,K、R、C形成闭合回路,消除干扰。

软件复位。 二、函数的调用

1、例如:利用void secondcount() void ledrefresh()函数优化秒表程序。 2、静态变量只第一次有效。

3、函数调用时,不加函数类型(无void等),加分号; 函数调用之前,必须进行定义或声明;

函数声明的时候必须加:函数类型,函数的形参,最后加一个分号。 4、函数体顺序:函数声明→main()→子函数排序→中断函数。 5、实参,形参27-32分钟。

三、独立式按键

VCC+5RR4.7kMCU的i/o口U1A内部输出1NOT2Q?NPNk1内部输入准双向I/O口

只有内部输出为高电平,MCU的I0口就为高电平,才能读键。故有P2 = 0XF7; 程序一:

#include // 用K1-K4控制LED6-9的亮灭

sbit ADDR0 = P1^0; sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;

sbit LED9 = P0^7; sbit LED8 = P0^6; sbit LED7 = P0^5; sbit LED6 = P0^4;

sbit KEY1 = P2^4; sbit KEY2 = P2^5; sbit KEY3 = P2^6; sbit KEY4 = P2^7; main() { } (法二) Main程序 #include #include\main() {

while(1) P0 = 0Xff; KEYOUT1 = 0; ENLED = 0;

ADDR3 = 1;

ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; while(1) { }

LED9 = KEY1; //把读的KEY1的值赋给LED9; LED8 = KEY2; LED7 = KEY3; LED6 = KEY4;

P2 = 0XF7; //KEY1=4接高电平、KEYOUT4接低电平 ENLED = 0;

ADDR3 = 1;

ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;


单片机听课笔记1-8课(金沙滩2024年更新)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:定位销轴的数控加工工艺与程序编制

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219