历史上的今天
今天是:2025年01月11日(星期六)
2020年01月11日 | DIY(码表)制作实验
2020-01-11 来源:eefocus
代码:
#include 实验效果:
typedef unsigned char u8;
typedef unsigned int u16;
/********端口定义*********/
#define DATA P0
sbit seg_sel = P1^4;
sbit bit_sel = P1^5;
sbit start = P3^2;
sbit store = P3^3;
sbit diskey = P3^4;
sbit reset = P3^5;
sbit led = P1^0;
/********变量定义*********/
u16 tem_ms;
u8 n_ten_ms,n_sec,n_min;
u8 run_flag;//当run_flag为1,代表开始计数
u8 temp_buf[5][3];
u8 arr_pt;
u8 code seg_tab[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};
u8 code bit_tab[]={
0x10,0x20,0x40,0x80,
0x01,0x02,0x04,0x08
};
void delay(unsigned int y)
{
unsigned int x,z;
for(x=y; x>0; x--)
for(z=110; z>0; z--);
}
void display_led(u8 which_bit, u8 which_number)
{
bit_sel = 1;//Q[7..0]=D[7..0]
DATA = bit_tab[which_bit];
bit_sel = 0;//BIT[7..0]=0x80
seg_sel = 1;//Q[7..0]=D[7..0]
DATA = seg_tab[which_number];
seg_sel = 0;
}
void display(u8 which_bit, u8 which_number)
{
u8 x,y;
x = which_number/10;//分离十位
y = which_number%10;//分离个位
if (which_bit == 1)
{
display_led(1, x);
delay(2);
display_led(0, y);
delay(2);
}
if (which_bit == 2)
{
display_led(4, x);
delay(2);
display_led(3, y);
delay(2);
}
if (which_bit == 3)
{
display_led(7, x);
delay(2);
display_led(6, y);
delay(2);
}
}
void reflash (void)
{
display(1, n_ten_ms);
display(2, n_sec);
display(3, n_min);
}
void main (void)
{
TMOD = 0x01;//设置定时/计数器T0
TH0 = (65535-10000) / 256;
TL0 = (65535-10000) % 256;
EA = 1;//开放总中断
ET0 = 1;//开放定时器0的溢出中断
//TR0 = 1;
while (1)
{
if (start == 0)
{
delay(5);
if (start == 0)
{
run_flag = ~run_flag;
} while(!start);
}
if (run_flag)
{
TR0 = 1; //开始计数
}
else if (!run_flag)
{
TR0 = 0;
if (diskey == 0)
{
delay (5);
if (diskey == 0)
{
arr_pt --;
n_ten_ms = temp_buf[arr_pt][0];
n_sec = temp_buf[arr_pt][1];
n_min = temp_buf[arr_pt][2];
} while (!diskey);
}
}
if (reset == 0)
{
delay(5);
if (reset == 0)
{
n_ten_ms = 0;
n_sec = 0;
n_min = 0;
} while(!reset);
}
if (store == 0)
{
delay(5);
if (store == 0)
{
if ((arr_pt >=0) && (arr_pt< 5))
{
temp_buf[arr_pt][0] = n_ten_ms;
temp_buf[arr_pt][1] = n_sec;
temp_buf[arr_pt][2] = n_min;
arr_pt++;
}
} while(!store);
}
reflash();
}
}
void t0_server(void) interrupt 1
{
TH0 = (65535-10000) / 256;
TL0 = (65535-10000) % 256;
n_ten_ms++;
if (n_ten_ms >= 100)
{
n_ten_ms = 0;
n_sec++;
if (n_sec >= 60)
{
n_sec = 0;
n_min++;
if (n_min >= 60)
n_min = 0;
}
}
}
电路图:
上一篇:延时Led灯
下一篇:1602液晶显示实验
史海拾趣
|
节能灯寿命为2500~5000小时,而半导体LED照明灯正常情况下的寿命是5万-8万小时,但LED灯的耗电量只有普通白炽灯、霓虹灯的1/10。因此,如果我国的照明全部采用LED灯,则一年节约的电费相当于建造了6座三峡电站。有关部门应该采取强制措施推广节能产 ...… 查看全部问答> |
|
常用标志寄存器含义的理解,这是微型计算机的题目,可我不知道如何回答,我是学软件的,初次接触这些硬件的知识,老是很模糊,弄不清楚实际是怎么回事,请各位给点意见,回答一下~谢谢~… 查看全部问答> |
|
秀下我做的调试工具:UsbHub+xlink+USB转串口/485/Nrf24L01/红外 秀下我的调试工具UsbHub+xlink+USB转串口/485/Nrf24L01/红外 看了小马哥的多功能调试工具真是羡慕啊,于是也做了个高速USBhub托了个xlink, 用stm32实现 USB转串口TTL/串口232/串口485(通过跳线来实现)/NRF24L01/红外,同时支持输出一路PWM输出。 ...… 查看全部问答> |
|
我下了光盘,按照HELPER2416_V2 开发板LINUX 用户手册 的说明按装上了。fedora开发环境。 没有什么可注意的地方,有一个地方就是安装fedora那个选项,直接选中解压后的F12目录就行。我不知怎么搞出两个fedora文件,反正也好用: 我现在的 ...… 查看全部问答> |




