用最简单直白的话解决大家大部分的小错误
**************************************************************************************
本次解题思路结合
1——第九套蓝桥杯省赛真题
2——B站小蜜蜂的暴力解题思想
在大概完成B站西风的大模板的Led Seg Key Ds1302后就可以开始解题
下面讲的是在写底层时会出现的一些常见错误
/********1号底层文件**********/
#include "init.h"
void System_Init() {
P0 = 0xff;
P2 = P2 & 0x1f | 0x80;
P2 &= 0x1f;
P0 = 0x00;
P2 = P2 & 0x1f | 0xa0;
P2 &= 0x1f;
}
1号底层文件在写出来后记得把函数放到main函数的while前面 ,不然没分。
/*********************2号底层文件***************/
unsigned char seg_dula[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x88};
unsigned char seg_wela[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Seg_Disp(unsigned char wela,dula,point)
{
P0 = 0xff;
P2 = P2 & 0x1f | 0xe0;
P2 &= 0x1f;
P0 = seg_wela[wela];
P2 = P2 & 0x1f | 0xc0;
P2 &= 0x1f;
P0 = seg_dula[dula];
if(point)
P0 &= 0x7f;
P2 = P2 & 0x1f | 0xe0;
P2 &= 0x1f;
在写2号底层的时候 段码表 位码表 有时候会出错 要看清是共阴极 共阳极 (其实没啥差别加个取反就行)
有不会写段码表位码表的 直接推荐你们去stc_-isp上复制
还有就是数码管显示时间的时候会有 “-” 标志 这个标志建议 西风的底层生成这个看不懂的话直接
在位码表后面加上 “-” 的位码 建议记一下 “-”的段码表 0xfe
if(point)
P0 &= ?;
P2 = P2 & 0x1f | 0xe0;
P2 &= 0x1f;
然后西风的东西太复杂了 让我们搞点骚操作
unsigned char Seg_Point[8];
unsigned char Seg_Point[8]={0,0,1,0,0,1,0,0};// “-”
我们卡好 “-” 的位置在主函数里面的 Seg_Point[] 里面的位置把0换成一
这个是简单好用 但是不要忘记了 切换到别的模式后记得改一改
时间显示还好 但是要是换成温度显示了 就直接重定义 在条件函数里面记得重复改变 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
底层敲完之后之后开始解题
***************************************************************************************************
通读题目快速形成思维导图
思维导图对解题很有帮助 有个思维导图在 在设计程序的时候就能从最底层开始设计
有个大概的逻辑性 这样程序不会出现问题
有了思维导图就能给程序进行分层次
例如 Seg_Mode=0 就是时间显示
=1 就是温度显示
就这样分层次的往下写就行
能避免逻辑上出的问题
这里博主和西风的模板最大不同之处就体现出来了
博主的方法能帮你规避掉西风模板中复杂的位运算 即使你是小白 也能轻松运用其解题
将16进制加减转化为十进制加减(因为ds13b20底层我不会改 所以还是保留了它的十六进制 不过 最后进行Bcd转码赋值给数组就行)
*****************************************插图省略***********************************************************
另外注意一下理论上涉及数组转换 要想写的舒服就直接定义一个新数组 在这个数组里面把要输出的值弄对 直接输出给Seg_Buf [] 就行