#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO_KEY P2
uchar code LED_code[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xBF};
uchar dis[4] = {1, 0, 0, 0};
int retime, down;
uchar flag;
uchar pwm;
uchar time;
//延时函数
void delay(uint k)
{
uint m, n;
for (m = 0; m < k; m++)
for (n = 0; n < 120; n++);
}
//数码管显示
void display(uchar num[])
{
uchar i, j;
j = 0x01;
for (i = 0; i < 4; ++i) {
P2 &= 0xf0;
P2 |= j;
P0 = LED_code[num[i]];
delay(1);
j <<= 1;
}
}
//循环时间更新
void update_dis(int retime)
{
dis[1] = retime / 100;
dis[2] = (retime / 10) % 10;
dis[3] = retime % 10;
}
void change_direction(uchar direction)
{
if (direction) {
P2 &= ~0x10; // P24
P2 |= 0x20; // P25
} else {
P2 &= ~0x20;
P2 |= 0x10;
}
}
//监听按键
uchar key_scan()
{
static uchar key_up = 1;
static target_key;
uchar i, j;
j = 0x80;
P3 = 0xff;
for (i = 0; i < 5; i++) {
if (((P3 & j) == 0) && key_up) {
delay(5);
key_up = 0;
target_key = j;
if ((P3 & j) == 0) {
if (j == 0x08) dis[0] = 1;
if (j == 0x10) dis[0] = 2;
if (j == 0x20) dis[0] = 3;
if (j == 0x40) {
retime += 120;
if (retime == 720 || retime > 720)
retime = 0;
update_dis(retime);
}
if (j == 0x80) {
if (TR1 == 1)
TR1 = 0;
else TR1 = 1;
}
}
} else if ((P3 & target_key) != 0) key_up = 1;
j = j >> 1;
}
return 0;
}
void tim0() interrupt 1
{
TR0 = 0;
TH0 = (65536-1000)/256;
TL0 = (65536-1000)%256;
TR0 = 1;
pwm += 1;
if (pwm >= 100) pwm = 0;
down += 1;
if (down == 1000) {
if (retime > 0) {
retime -= 1;
update_dis(retime);
}
down = 0;
}
if (dis[0] == 1) {
if (pwm < 25) {
P2 &= ~0x40;
} else {
P2 |= 0x40;
}
} if (dis[0] == 2) {
if (pwm < 16) {
P2 &= ~0x40;
} else {
P2 |= 0x40;
}
} if (dis[0] == 3) {
if (pwm < 75) {
P2 &= ~0x40;
} else {
P2 |= 0x40;
}
}
}
void tim1() interrupt 3
{
TR1 = 0;
TH1 = (65536-1000)/256;
TL1 = (65536-1000)%256;
TR1 = 1;
time += 1;
if (time == 30) {
flag = !flag;
time = 0;
}
}
void int0() interrupt 2
{
P2 |= 0xf0;
}
void init()
{
TMOD = 0x11;
TH0 = (65536-1000)/256;
TL0 = (65536-1000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
ET1 = 1;
EX0 = 0;
IT0 = 1;
}
int main()
{
retime = 0;
flag = 0;
init();
while (1) {
display(dis);
key_scan();
change_direction(flag);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
基于51单片机的模拟风扇系统(原理图+仿真+源程序+PCB).zip (34个子文件)
模拟风扇
ad
Schlib2.SchLib 1.61MB
fan.SchDoc 152KB
fan.PrjPcb 39KB
PcbLib1.PcbLib 121KB
Schlib1.SchLib 52KB
fan.PcbDoc 1.03MB
History
fan.~(1).SchDoc.Zip 20KB
fan.~(1).PcbDoc.Zip 607KB
fan.~(1).PrjPcb.Zip 5KB
__Previews
fan.PcbDocPreview 42KB
PCB1.PcbDocPreview 42KB
fan.SchDocPreview 54KB
proteus
fan.pdsprj.DESKTOP-BIA33AP.zxjnb.workspace 2KB
fan.pdsprj 27KB
Backup Of fan.pdsbak 27KB
fan.pdsprj.DESKTOP-BIA33AP.晓杰.workspace 1KB
Last Loaded fan.pdsbak 26KB
keil
fan_uvproj.bak 13KB
fan 8KB
STARTUP.OBJ 749B
main.OBJ 9KB
STARTUP.A51 6KB
fan.M51 14KB
STARTUP.LST 14KB
fan.hex 3KB
fan.lnp 40B
fan_uvopt.bak 54KB
fan.plg 1KB
fan.uvproj 13KB
main.LST 10KB
main.c 3KB
fan.uvopt 54KB
fan1.jpg 17KB
fan.jpg 17KB
共 34 条
- 1
我有一根仙女棒
- 粉丝: 5
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0