① 单片机设计动态显示时间6:00怎么设置
从左到右的开关控制分别为:秒设置、分设置、时设置、敏拍团进入时间设置(设置时间需要按一下这个再按前面3个按键设置)、闹钟设置(通过前面3个按键设置)、保存设置(设置完成后按下保存并退出)。
图片
时钟可以显示到秒位
数码管用的是共阴,共阳的话加三极管闲麻烦,没加。
数码管a~g接的P0口,没用10K排阻上拉,试了下觉得亮度太低了,就都换成了2K的作为上拉。
图片
有兴趣的可以给加上温度传感器,可以显示温度(我这里面就没加了)
初学单片机没多久,欢迎大佬指导。
材料如下:89C52*1
4位数码管*1+2位数码管*1(当然如桥橘果有六位的也可以直接用,找不到其他数码管了就这么混搭了)
有源蜂鸣器*1(试过无源,但时间计算过于占用资源导致发声不是很完美,大佬可以改一下)
轻触开关*7(1个用于复位,其余六个用于设置) + 自锁开关*1
电池*1 + 5V稳压*1
单片机源码:
#include
#define uint unsigned int
#define uchar unsigned char
sbit WE1=P2^5;
sbit WE2=P2^4;
sbit WE3=P2^3;
sbit WE4=P2^2;
sbit WE5=P2^1;
sbit WE6=P2^0;
sbit K1=P1^0; //设置小时位
sbit K2=P1^1; //设置分位
sbit K3=P1^2; //设置秒位
sbit K4=P1^3; //进入时间设置
sbit K5=P1^4; //进入闹钟设置
sbit K6=P1^5; //退出设置
sbit BZ=P1^6; //蜂鸣器接口
uchar code table[]={
0XC0,0XF9,0XA4,
0XB0,0X99,0X92,
0X82,0XF8,0X80,
0X90};
uint tt=0,i=0,j=0,T=0,R=0,S;
uint W1=0,W2=0,W3=0,W4=0,W5=0,W6=0; //当前时间位,依次接P0口即可,即W1=P0^0,W2=P0^2.....以此类推
uint WD1=0,WD2=0,WD3=0,WD4=0,WD5=0,WD6=0; //闹钟时间位,用于储存设置的闹钟时间,不接
void delay(uint); //软延时
//void delay1(uint);
void js(void); //时钟进位定义
void key(void); //按键
void XS(uint,uint,uint,uint,uint,uint); //动态扫描数码管显示
void xhsz(uint,uint,uint,uint,uint,uint,uint); //时钟位设置函数
void main()
{
P1=0X0;
TMOD=0X01;
TH0=(65536-49971)/256;
TL0=(65536-49971)%256;
//TH1=(65536-65535)/256; //定时器二(贺巧未启用)
//TL1=(65536-65535)%256;
EA=1;
ET0=1;
//ET1=1;
TR0=1;
//TR1=1;
while(1)
{
key();
XS(W1,W2,W3,W4,W5,W6);
js();
if(WD1==W1&&WD2==W2&&WD3==W3&&WD4==W4&&WD5==W5&&WD6==W6) //闹钟定时判断
T=1;
}
}
void xhsz(uint Q1,uint Q2,uint Q3,uint Q4,uint Q5,uint Q6,uint Y) //输入需要设置的位Q1~Q6,末尾输入1则将值赋给W1~W6,输入0则赋给WD1~WD6
{
while(1)
{
if(Y==1)
{
W1=Q1;W2=Q2;W3=Q3;W4=Q4;W5=Q5;W6=Q6;
}
if(Y==0)
{
WD1=Q1;WD2=Q2;WD3=Q3;WD4=Q4;WD5=Q5;WD6=Q6;
}
if(K1==1)//秒调
{
delay(10);
if(K1==1)
{
while(K1==1)
XS(Q1,Q2,Q3,Q4,Q5,Q6);
Q1++;
② 大神们,见过有人用单片机控制oled动态显示时间,温度,心电什么的,怎么做到的啊
你能显示图片,证明可以驱动OLED,既然能驱动OLED,就应该理解驱动过程。
例如时间,一般做数组,0~9数字的对应字符数组,将根据时间将数字显示在指定位置。当然还可以做“:”“上午”这些字符的数组。说白了就是动态组合。
③ 单片机定时的时间怎么改变
51单片机,根据晶振频率,计算指令周期,设置定时器的分频,然后设置定时器的工作方式tmod,最后设置初值th0
tl0
比如用的x
hz的晶振,stc的单片机有3种模式(x/12)x/6,还有单周期指令,
选择12分频的,t=1/(x/12)就是一个指令周期
,如果定时没有分频,(65536-z(初值))*t就是定时的时间
比如是12m的晶振那么
设置tmod=0x01;16位定时器模式
th0=(65536-20000)/256;
tl0=(65536-20000)%256;就是设置了20ms的定时
④ 51单片机,1602动态显示时钟,有独立按键(3个k1,k2,k3)分别控制选择,加1,减一
你好,
我这又一个参考程序,是用郭天祥的TX-1C开发板写的,有3个按键,调节光标,时间加,时间减。引脚方便可以根据自己的开发板更改,其他程序内容不变。
希望我的回答能帮助到你。
⑤ 【单片机】单片机的定时时间是怎样计算
单片机的定时时间的计算公式=计数值(定时值)*机器周期=计数值(定时值)*12/晶振频率。
上面的两个等号是等价的,因为,单片机的机器周期=12秒/晶振频率,因此两个公式通用。
完成一个基本操作所需要的时间称为机器周期。一般,一个机器周期由若干个S周期(状态周期)组成。80C51系列单片机一个机器周期由6个S周期组成。一个S周期(状态周期),由2个时钟周期组成。
若干个机器周期,组成了指令周期。根据指令不同,所需的机器周期数也不同。
(5)单片机动态时间扩展阅读
几种典型指令;
1、单字节周期指令(比如INCA)
2、双字节单周期指令(比如ADDA,#data)
3、单字节双周期指令(比如INCDPTR)
4、单字陆宏节双周期指令(比如MOVXA@DPTR)
⑥ 51单片机如何实时显示时间
单片机实时显示时间,可以用ds1302产生时钟,然后计算时钟,并送出结果。