/*********************************************
File name : Menu_test1.c
Chip type : AT89C52
Program type : Application
Clock frequency : 11.0592 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define key_input P2
#define key_mask 0xc0
#define key_no 0
#define key_k1 1
#define key_k2 2
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
uchar code led_7[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code position[6]= {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar time[3],time_set[3];
uchar dis_buff[6];
uchar time_counter,key_stime_counter;
uchar clock_state = 6,return_time;
bit point_on,set_on,time_1s_ok,key_stime_ok;
void timer_init(void)
{
TMOD=0x01;
TH0=0xf8;
TL0=0xcd;
EA=1;
ET0=1;
TR0=1;
}
void display(void)
{
static uchar posit=0;
P2 = 0xff;
P0 = led_7[dis_buff[posit]];
if (set_on && (posit==clock_state))
{
P0= 0x00;
}
if (point_on && (posit==2||posit==4))
{
P0 |= 0x80;
}
P2 = position[posit];
if (++posit >=6 )
{
posit = 0;
}
}
void time0_int() interrupt 1 using 1
{
TH0=0xf8;
TL0=0xcd;
display();
if (++key_stime_counter >=5)
{
key_stime_counter = 0;
key_stime_ok = 1;
if (!(++time_counter % 25))
{
set_on = !set_on;
}
if (time_counter >= 100)
{
time_counter = 0;
time_1s_ok = 1;
}
}
}
void time_to_disbuffer(uchar *time)
{
uchar i,j=0;
for (i=0; i<=2; i++)
{
dis_buff[j++] = time[i] % 10;
dis_buff[j++] = time[i] / 10;
}
}
uchar read_key(void)
{
static uchar key_state = 0,key_press;
uchar key_return = key_no;
key_press = key_input & key_mask;
switch (key_state)
{
case key_state_0:
if (key_press != key_mask)
{
key_state = key_state_1;
}
break;
case key_state_1:
if (key_press == (key_input & key_mask))
{
if (key_press == 0x40)
{
key_return = key_k1;
}
else if (key_press == 0x80)
{
key_return = key_k2;
}
key_state = key_state_2;
}
else
{
key_state = key_state_0;
}
break;
case key_state_2:
if (key_press == key_mask)
{
key_state = key_state_0;
}
break;
}
return key_return;
}
void main(void)
{
uchar key_temp,i;
timer_init();
P2=0xff;
time[2] = 23;
time[1] = 58;
time[0] = 55;
while (1)
{
if (time_1s_ok)
{
time_1s_ok = 0;
point_on = ~point_on;
if (++time[0] >= 60)
{
time[0] = 0;
if (++time[1] >= 60)
{
time[1] = 0;
if (++time[2] >= 24)
{
time[2] = 0;
}
}
}
if ((++return_time >= 20) && (clock_state != 6))
{
clock_state = 6;
}
if (clock_state == 6)
{
time_to_disbuffer(time);
}
}
if (key_stime_ok)
{
key_stime_ok = 0;
key_temp = read_key();
if (key_temp)
{
return_time = 0;
if (key_temp == key_k1)
{
if (++clock_state >= 7)
{
clock_state = 0;
}
if (clock_state == 0)
{
for (i=0; i<=2; i++)
{
time_set[i] = 0;
}
time_to_disbuffer(time_set);
}
if (clock_state == 6)
{
for (i=0; i<=2; i++)
{
time[i] = time_set[i];
}
time_to_disbuffer(time);
}
}
if ((clock_state != 6) && (key_temp == key_k2))
{
if (clock_state%2)
{
time_set[clock_state/2] += 10;
}
else
{
if ((time_set[clock_state/2] % 10) == 9)
{
time_set[clock_state/2] -= 9;
}
else
{
time_set[clock_state/2]+=1;
}
}
if (time_set[0] >= 60)
{
time_set[0]-= 60;
}
if (time_set[1] >= 60)
{
time_set[1]-= 60;
}
if (time_set[2] >= 24)
{
time_set[2]-= 10;
}
time_to_disbuffer(time_set);
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
State-machine-clock.rar_state-machine_状态机_状态机 单片机
共16个文件
bak:2个
dsn:1个
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 107 浏览量
2022-09-24
03:56:00
上传
评论
收藏 152KB RAR 举报
温馨提示
状态机思想写的51单片机驱动的时钟,含ROTEUS仿真文件
资源推荐
资源详情
资源评论
收起资源包目录
State-machine-clock.rar (16个子文件)
状态机1
Menu_test1_Uv2.Bak 2KB
Menu_test1.jpg 271KB
Menu_test1.LST 10KB
Menu_test1.hex 2KB
Menu_test1.OBJ 5KB
Menu_test1.lnp 52B
Menu_test1 3KB
Menu_test1_Opt.Bak 1001B
Last Loaded Menu_test1.DBK 107KB
Menu_test1.plg 190B
Menu_test1.DSN 107KB
Menu_test1.PWI 742B
Menu_test1.Opt 1001B
Menu_test1.M51 13KB
Menu_test1.Uv2 2KB
Menu_test1.c 6KB
共 16 条
- 1
资源评论
寒泊
- 粉丝: 75
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip
- Hive SQL经典面试题,大数据SQL经典面试题
- Qt实现喷码器代码,实现二维码、条形码、图形的旋转、移动等
- 基于LM324芯片比较器传感器模块AD09设计硬件(原理图+PCB)工程文件.zip
- HTTP请求 - 记一笔-添加记账.jmx
- 2205040245凡永超硬间隔svm.ipynb
- Qt喷码器demo,演示软件,不是代码
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功