本人大二进实验室,大二觉得自己不行,就没参加蓝桥杯,现大三参加第九届蓝桥杯也就准备了一个月,获得省赛一等奖,现后天决赛比赛,突发想法想发第一个帖子。希望大家支持,我也会更加努力。
下面贴代码。(只是数码管)
base.c该文件用来写底层驱动文件。
代码:
#include "base.h"//用来写底层驱动文件
//所有IO口操作没有用”与或“运算,些许地方会有影响。理应用的,这里偷懒
uchar tab[] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选码
uchar tab1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6};//段选码0xbf为“-”,0xc6为“C”
uchar ds[] = {50,57,23,23,5,3,18};//初始时间 :50秒 57分 23时 23日 5月 星期三 2018年(严格按照顺序)
uchar time[7];//实时时钟
void allinit()//初始化
{
P2 = 0XFF;
P0 = 0XFF;//关闭数码管段选
P2 = 0XA0;
P0 = 0X00;//关闭蜂鸣器、继电器
P2 = 0X80;
P0 = 0XFF;//关闭LED;
}
void delayms(uint ms)//11.0592mhz 延时 1ms
{
uint i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
void display(uchar m,uchar n)//数码管显示,m为位选,n为段选。
{
P2 = 0XFF;
P0 = 0XFF;//关闭段选码,消隐
P2 = 0XC0;
P0 = tab[m];//位选
P2 = 0XFF;
P0 = tab1[n];//片选
delayms(1);
P0 = 0XFF;//延时1ms,关闭段选,可解决数码管最后一位亮度较其他数码管亮的小bug。
}
uchar keyscan()//独立按键
{
uchar key;
if(P30 == 0)
{
delayms(5);//防抖
if(P30 == 0)
{
key = 7;
while(!P30);//松手检测
}
}
if(P31 == 0)
{