本来应该搞点电子元件然后装模作样的看看你现象啥的,but,我就懒得弄了,直接调试就行。
调试就是看这些变量有没有按照我们的想法去工作,就是看看寄存器里面的东西。
一开始简单,就看看IO就行。
开了调试以后在上面的外设里面打开
选端口
逻辑分析仪记得大写端口
可以使用了
#include "STC89C5xRC.H"
sbit LED_EN = P2^4;
sbit D1 = P0^0;
sbit D2 = P0^1;
// 上面都是定义要操作的IO口,是具体的一个端口
void delay_ms(unsigned int t);
void main()
{
LED_EN = 0;
// 置低
while (1)
{
D1=0;
D2=1;
delay_ms(500);
D1=1;
D2=0;
delay_ms(500);
}
}
void delay_ms(unsigned int t)
{
unsigned int x, y;
for (x = t; x > 0; x--)
{
for (y = 100; y > 0; y--)
{
}
}
}
如果不打断点调试,会在人口处停下。
F11是一步步的走,当到了一个子程序的时候,就进去,然后继续一步步的执行。
叫跟踪
单步呢,和上面的一样,但是跟的没有这么紧。到子函数的时候就当完事了继续下一步运行。
如果你运行到一个子函数里面,比如一个100000的循环,咋办?
运行到退出,全速运行出去。
还有我们感兴趣的蹲点,就运行到这里就行。
看黄色部分
符号列表
SEC是运行一个语句的时间
如果是已经开始调试了,这里灰色的条,点一下就打断点了。
复位后全为1
这是库文件的文档
C:\Keil_v5\C51\INC
这里是51支持的函数头
extern unsigned char _crol_ (unsigned char, unsigned char);
位循环函数,第一个是要处理的字符型变量,后面是循环位数
实例
头文件里面自己写的
打勾
sfr使用字节寻址
对寄存器的每一位使用位寻址
关于这个点数码管,其实就是点灯,然后灯做成了不一样的样子,所以还是控制IO的电平。
不过要想点亮灯需要一次点亮若干个管子,所以一组管子的IO状态就是所谓的字形码。
但是一个数码管就占8 个IO,我的天。。。
比如我的就连在了P0口,显示1,就是P0.1,P0.2低电平就行
也就是说:1111 1001 -> F9H,那么2就是A4H
然后就是把这个东西做个表叫段码表。
#include "STC89C5xRC.H"
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit seg4=P2^3;
unsigned char code seg[] ={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
}
// 共阳段码表
void delay_ms(unsigned int t);
void main()
{
seg1=0; seg2=0; seg3=0; seg4=0;
delay_ms(1);
P0=seg[1];
while(1);
}
void delay_ms(unsigned int t)
{
unsigned int x, y;
for (x = t; x > 0; x--)
{
for (y = 100; y > 0; y--)
{
}
}
}
上面1,2,3,4是4给数码管
第一个段码给P0,就是1
但是这种东西太土豪了,一个数码管8个IO。这样写,4个数码管全亮了。
#include "STC89C5xRC.H"
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit seg4=P2^3;
unsigned char code seg[] ={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
}
unsigned char z;
// 共阳段码表
void delay_ms(unsigned int t);
void main()
{
while(1)
{
seg4=0;
P0=seg[1];
delay_ms(300);
P2=0xFF;
P0=0xFF;
delay_ms(1);
seg3=0;
P0=seg[2];
delay_ms(300);
P2=0xFF;
P0=0xFF;
delay_ms(1);
seg2=0;
P0=seg[3];
delay_ms(300);
P2=0xFF;
P0=0xFF;
delay_ms(1);
seg1=0;
P0=seg[4];
delay_ms(300);
P2=0xFF;
P0=0xFF;
delay_ms(1);
}
}
void delay_ms(unsigned int t)
{
unsigned int x, y;
for (x = t; x > 0; x--)
{
for (y = 100; y > 0; y--)
{
}
}
}
依次显示1~4
我这一天就瞎写。。。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有