当前位置:网站首页>蓝桥杯单片机数码管技巧
蓝桥杯单片机数码管技巧
2022-07-02 03:29:00 【超561】
数码管使用技巧
1如何运用数码管配合按键切换界面显示切换界面
方法:定义一个变量来显示显示界面;通过按键来改变变量的数值;从而切换显示界面。
#include <STC15F2K60S2.H>
void Device_ctrl(unsigned char p2date,unsigned char p0date)//锁存器控制函数
{
P0=p0date;
P2=(P2&0X1F)|p2date;
P2&=0X1F;
}
unsigned char smg_count;
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阳极段码
unsigned char display_mode;//界面显示
void smg_show()
{
unsigned int i;
Device_ctrl(0xc0,0);
Device_ctrl(0xe0,~smg_display[i]);
Device_ctrl(0xc0,0x01<<i);
i=(i+1)%8;
}
void smg_process()
{
if(smg_count>3)
{
smg_count=0;
if(display_mode==0)//显示第一个界面
{
smg_display[0]=smg_du[0];
smg_display[1]=smg_du[1];
smg_display[2]=smg_du[2];
smg_display[3]=smg_du[3];
smg_display[4]=smg_du[4];
smg_display[5]=smg_du[5];
smg_display[6]=smg_du[6];
smg_display[7]=smg_du[7];
}
if(display_mode==1)//显示第二个界面
{
smg_display[0]=smg_du[1];
smg_display[1]=smg_du[2];
smg_display[2]=smg_du[3];
smg_display[3]=smg_du[4];
smg_display[4]=smg_du[5];
smg_display[5]=smg_du[6];
smg_display[6]=smg_du[7];
smg_display[7]=smg_du[8];
}
}
}
unsigned char trig_btn;
unsigned char con_btn;
unsigned int key_count;
void key_btn()//按键扫描函数
{
unsigned char readdate=P3^0xff;
trig_btn=readdate&(con_btn^0xff);
con_btn=readdate;
}
void key_process()//按键处理函数
{
if(key_count>10)//每十毫秒扫描一次按键
{
key_count=0;
key_btn();
if(trig_btn==0x08)//按键s4
{
display_mode++;
if(display_mode==2)//切换界面0 1
{
display_mode=0;
}
}
}
}
void Timer2Init() //1毫秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x18; //设置定时初值
T2H = 0xFC; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0x04;
EA=1;
}
void main()
{
Timer2Init();
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
key_process();
}
}
void service_timer2() interrupt 12
{
smg_count++;
key_count++;
smg_show();
}
2如何让数码管数据实现一秒亮灭
在定时器中设置一个一秒的定时;然后再用一个标志位显示,如果到了一秒就让数码管亮一秒没到的话就熄灭。
#include <STC15F2K60S2.H>
void Device_ctrl(unsigned char p2date,unsigned char p0date)
{
P0=p0date;
P2=(P2&0X1F)|p2date;
P2&=0X1F;
}
unsigned char smg_count;
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char display_mode;
void smg_show()
{
unsigned int i;
Device_ctrl(0xc0,0);
Device_ctrl(0xe0,~smg_display[i]);
Device_ctrl(0xc0,0x01<<i);
i=(i+1)%8;
}
bit smg_blink;
void smg_process()
{
if(smg_count>3)
{
smg_count=0;
if(smg_blink)
{
smg_display[0]=smg_du[0];
smg_display[1]=smg_du[1];
smg_display[2]=smg_du[2];
smg_display[3]=smg_du[3];
smg_display[4]=smg_du[4];
smg_display[5]=smg_du[5];
smg_display[6]=smg_du[6];
smg_display[7]=smg_du[7];
}
else
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=0x00;
smg_display[7]=0x00;
}
}
}
void Timer2Init() //1毫秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x18; //设置定时初值
T2H = 0xFC; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0x04;
EA=1;
}
void main()
{
Timer2Init();//定时器初始化
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
}
}
void service_timer2() interrupt 12//定时器使用函数
{
unsigned int time_count;//定时器计时变量
time_count++;
if(time_count>1000)//定时一秒
{
time_count=0;
smg_blink=!smg_blink;
}
smg_count++;
smg_show();
}
3数码管显示有用数据,没有显示的熄灭。
方法:按照十位百位千位判断
#include <STC15F2K60S2.H>
void Device_ctrl(unsigned char p2date,unsigned char p0date)
{
P0=p0date;
P2=(P2&0X1F)|p2date;
P2&=0X1F;
}
unsigned char smg_count;
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char display_mode;
unsigned int number=12345;
void smg_show()
{
unsigned int i;
Device_ctrl(0xc0,0);
Device_ctrl(0xe0,~smg_display[i]);
Device_ctrl(0xc0,0x01<<i);
i=(i+1)%8;
}
void smg_process()
{
if(smg_count>3)
{
smg_count=0;
if(number>9999)//如果大于9999
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=smg_du[number/10000];
smg_display[4]=smg_du[number/1000%10];
smg_display[5]=smg_du[number/100%10];
smg_display[6]=smg_du[number/10%10];
smg_display[7]=smg_du[number%10];
}
else if(number>999) //如果大于999
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=smg_du[number/1000%10];
smg_display[5]=smg_du[number/100%10];
smg_display[6]=smg_du[number/10%10];
smg_display[7]=smg_du[number%10];
}
else if(number>99)//如果大于99
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=smg_du[number/100%10];
smg_display[6]=smg_du[number/10%10];
smg_display[7]=smg_du[number%10];
}
else if(number>9)//如果大于9
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=smg_du[number/10%10];
smg_display[7]=smg_du[number%10];
}
else
{
smg_display[0]=0x00;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=0x00;
smg_display[7]=smg_du[number%10];
}
}
}
void Timer2Init() //1毫秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x18; //设置定时初值
T2H = 0xFC; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0x04;
EA=1;
}
void main()
{
Timer2Init();//定时器初始化
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
}
}
void service_timer2() interrupt 12//定时器使用函数
{
smg_count++;
smg_show();
}
边栏推荐
- ThreadLocal详解
- Global and Chinese markets for ultrasonic probe disinfection systems 2022-2028: Research Report on technology, participants, trends, market size and share
- Go执行shell命令
- C#聯合halcon脫離halcon環境以及各種報錯解决經曆
- 《MATLAB 神经网络43个案例分析》:第41章 定制神经网络的实现——神经网络的个性化建模与仿真
- PY3 link MySQL
- Oracle的md5
- Kotlin basic learning 13
- 焱融看 | 混合云时代下,如何制定多云策略
- Docker installs canal and MySQL for simple testing and implementation of redis and MySQL cache consistency
猜你喜欢
halcon图像矫正
焱融看 | 混合云时代下,如何制定多云策略
verilog 并行块实现
[C Advanced] brother Peng takes you to play with strings and memory functions
Large screen visualization from bronze to the advanced king, you only need a "component reuse"!
Eight steps of agile development process
Pycharm2021 delete the package warehouse list you added
MySQL advanced (Advanced) SQL statement (II)
Named block Verilog
[HCIA continuous update] overview of dynamic routing protocol
随机推荐
Aaaaaaaaaaaa
How to do medium and long-term stocks, and what are the medium and long-term stock trading skills?
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
ORA-01547、ORA-01194、ORA-01110
Grpc快速实践
FFMpeg AVFrame 的概念.
Global and Chinese market of X-ray detectors 2022-2028: Research Report on technology, participants, trends, market size and share
Unity脚本的基础语法(6)-特定文件夹
Network connection mode of QT
Verilog parallel block implementation
Verilog reg register, vector, integer, real, time register
Verilog avoid latch
C # joint Halcon's experience of breaking away from Halcon environment and various error reporting solutions
《MATLAB 神經網絡43個案例分析》:第42章 並行運算與神經網絡——基於CPU/GPU的並行神經網絡運算
VS2010插件NuGet
venn圖取交集
[yolo3d]: real time detection of end-to-end 3D point cloud input
MSI announced that its motherboard products will cancel all paper accessories
Go执行shell命令
Kotlin basic learning 17