标题:
小白再次帮友求助 “4位数据管,从0000到9999,每0.5s增加1”程序设计
[打印本页]
作者:
lg0o0
时间:
2017-6-26 11:36
标题:
小白再次帮友求助 “4位数据管,从0000到9999,每0.5s增加1”程序设计
“4位数据管,从0000到9999,每0.5s增加1”程序设计
作者:
3213123s
时间:
2017-6-26 20:20
大概是这样的,开定时器1,工作方式1,初值设置到50毫秒一中断,if判断十次中断进行一次处理
断选和位选分成两个数组,这个具体就看你的硬件怎么连接的了,然后int个数,在每十次中断里将它+1,分别取这个数的千百十个位,对应数组元素送入段选。
开定时器0,2毫秒一中断,中断中进行动态显示
作者:
大黄蜂001
时间:
2017-6-26 22:17
不许用开定时器0了吧?
作者:
yzwzfyz
时间:
2017-6-26 22:36
本帖最后由 yzwzfyz 于 2017-6-26 22:58 编辑
开启T0中断,每4ms中断一次。
设置一个变量R_9999(0-9999)做计数用。用法:每0.5秒R_9999+1。
设置一个扫描计数器R_SC(=0-3)。用法:每次T0中断R_SC+1,当R_SC=4时回0。
设置一个0.5秒计时器R_05(=0-124)。用法:每次T0中断,R_05+1,R_05=125时回0。
每次T0中断依序做以下动作:
自动+1:
1、R_05+1,当R_05=125时做以下动作(否则不处理):
1.1、R_05=0;
1.2、R_9999+1。
扫描显示:
2、R_SC+1(为切换显示指明显示位),如果R_SC=4则回0(只有4个LED),再做以下动作(无论R_SC=?):
2.1、根据R_SC的值,取R_9999之中的一个位(R_SC:0-3各对应个、十、百、千位)放入A中;
2.2、将A进行译码(事先做一个表10个字节:对应LED段码显示0-9的段表达明暗的字节形式);
2.3、关闭4个LED;(以下改变显示内容时不会出现错字闪动);
2.4、将译码后的A值通过IO口送到LED的8个段显示上(只用七段就够了,因为已关断,所以这时无显示,也就无所畏对错);
2.5、接通显示的这个LED(三个关闭一个开通,这时才正式显示一个LED,完成扫描显示一位)。
如果自己还不会写,也不想自己写,就改行吧。
作者:
HC6800-ES-V2.0
时间:
2017-6-27 07:24
看看我编的程序对不对。对应的电路如图。
#include<reg51.h>
#define smg P0
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
unsigned char code xs[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char i=0,t=0;
unsigned int j=0;
void Delay(unsigned char c);
void play(void);
void TimeConfig();
void main(void)
{
TimeConfig();
t=10;
smg=0x00;
while(1)
{
if (i>=10)
{
j++;
}
if (j==9999)
{
j=0;
}
play();
}
}
void play(void)
{
c=1;b=0;a=0;
smg=xs[j/1000];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=1;a=1;
smg=xs[(j%1000)/100];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=1;a=0;
smg=xs[(j%100)/10];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=0;a=1;
smg=xs[(j%10)/1];
Delay(t);
smg=0x00;
Delay(t);
}
void Delay(unsigned char c)
{
unsigned char b;
for(c;c>0;c--)
for(b=10;b>0;b--);
}
void TimeConfig()
{
TMOD = 0x01;
TH0 = 0x3c; //设置初始值,定时50ms
TL0 = 0xb0;
EA = 1; //总中断开启
ET0 = 1; //定时器0中断开启
TR0 = 1; //启动定时器0
}
void Time0() interrupt 1//定时器0中断服务函数
{
TH0 = 0x3c; //重装初值
TL0 = 0xb0;
i++;
}
1.jpg
(60.96 KB, 下载次数: 48)
下载附件
2017-6-27 07:24 上传
2.jpg
(17.4 KB, 下载次数: 44)
下载附件
2017-6-27 07:24 上传
作者:
HC6800-ES-V2.0
时间:
2017-6-27 11:11
刚才发的程序,有一点错误!抱歉!
就是这里:
if (i>=10)
{
j++;
}
应该加一句:
if (i>=10)
{
j++;
i=0;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1