你也不说你具体那里不会,是不会用定时器还是不会显示还是不会按键检测,就直接把题贴出来有什么用吗
2019/6/6更新
今天刚好有空,找了段代码改了一下,做了个仿真,相当于一个demo吧。我也是第一次做这个可能不太完美,给个启发吧
# include
# define uchar unsigned char
# define uint unsigned int
uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳极的段码
sbit CS_1 = P2^0;
sbit CS_2 = P2^1;
sbit S1 = P1^0;
uchar freq = 0;
void DelayMs(uint x); //延时
void scan_s1(); //扫描按键,按一次频率增加1Hz
void display_num(uchar freq);//显示频率
void scan_s1()
{
if(!S1)
{
DelayMs(10);//延时防抖动
if(!S1)
{
while(!S1);
//检测到按键改变频率
/*我这里只改变显示的数值,实际上改变数值后
你还应该根据新的数值改变定时器的预设值,才能真正改变频率*/
freq = (freq+1)%100;
}
}
}
void display_num(uchar freq)
{
uchar num1,num2;
num1 = freq/10;//频率十位
num2 = freq%10;//个位
CS_1 = 0;//打开位选,显示十位
P0 = ~DSY_CODE[num1];
DelayMs(10);
CS_1 = 1;
CS_2 = 0;//打开位选,显示个位
P0 = ~DSY_CODE[num2];
DelayMs(10);
CS_2 = 1;
}
void DelayMs(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void main()
{
uchar i = 0;
P0 = 0x00;
CS_1 = 1;
CS_2 = 1;//初始化
while(1)
{
display_num(freq);
scan_s1();
DelayMs(10);
}
}