1.18

芯片缺口对应基座上的字母.

仿真器usb口朝向数码管方向

1.19

led灯

P2_x值为0时亮.

工作原理:

二极管一头接电源,一头接IO口.当IO口输出电平为0时二极管单向导通

独立按键P3_x值为0时表示按键.

工作原理:独立按键一头接地,一头接IO口.当IO口的输出电平为0时表示独立按键被按下.

注意:独立按键按下时弹片会震动10ms左右,留足时间.

数码管

数码管可以分成74HC138译码器模块和动态数码管模块.

74HC138译码器

由于译码器出口的8个口仅能有一位为1,因此可以用3个IO口控制

74HC245

数码管在74HC245会反过来

数码管不能在同一时刻显示多个数字,一次只能控制一个,多了会串线.

如:abc(1110 0000)代表P0=0x07(0000 0111)

1674829491265.png

表示数码管第几位函数如下(仅对该单片机有效)

1
2
3
4
5
6
void led_turn(int x)
{
x=9-x;
x--;
P2=x*4;
}

对于数码管的abcdef

切记先将P0初始化

1
2
3
4
5
6
void led_num_turn(char x)
{
int xx=(x-'a' );
int x1=1<<xx;
P0=P0|x1;
}

模块化编程

1
2
3
4
5
6
//a.h
//防止多包含库
#ifndef _A_H_
#define _A_H_
void a();
#endif

1.27

矩阵键盘

编写了MatrixKey.c

了解了unsigned char 和int 相互转换可能出问题

2.6

lcd1602

通过输入指令在显示器上显示.

C:\Users\windstar\AppData\Roaming\Typora\typora-user-images\v2-3f2d9e5317272d26e43c2ce76f44d19b_720w.webp

将字母由点阵形式表示.

常用字符代号存储在CGROM中,可在DDRAM写入字符代号,即可.

若字符未被存储在CGROM中,可进行自定义.

1675619652509.png

其中LCD WR ,LCD RS , LCD EN 处于P2_5,P2_6,P2_7

LCD D01234567 位于P0口

1
2
3
4
sbit LCD_RS = P2^6;
sbit LCD_RW = P2^5;
sbit LCD_EN = P2^7;
#define LCD_DataPort P0

写入数据到DDRAM

image.png

1
2
3
4
5
6
7
8
9
10
void LCD_WriteData(unsigned char Data)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DataPort = Data;
LCD_EN = 1;
LCD_Delay();
LCD_EN = 0;
LCD_Delay();
}

中断

通过向中断寄存器写入数据,来进行操作.

1675620493771.png

1
2
3
4
5
// 定时器0中断

EA=1;
ET0=1;
PT0=0;

1675620912428.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//定时器0中断

void Timer0_Isr(void) interrupt 1
{
}

void Timer0_Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x66; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1; //使能定时器0中断
}