查看: 107|回复: 2
打印 上一主题 下一主题

自学单片机_3(数码管按流水灯计数)

[复制链接] qrcode

368

主题

2017

帖子

4268

积分

论坛元老

Rank: 8Rank: 8

积分
4268
楼主
跳转到指定楼层
发表于 2015-2-5 12:17 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
说明:每一个程序都是通过手头上的现有的片子,通过ISP下载可以实现的,有什么问题,欢迎大家指点,纠正。
实现目的:流水灯每左移一次,蜂鸣器响;当8个流水灯分别显示完后,数码管个位开始计数;当数码管个位计数为9时,个位清零,数码管十位开始计数;当十位计数为9时,清零。

#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit bee="P2"^3;
sbit dula="P2"^6;
sbit wela="P2"^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
main()
{
uint num,temp,num1,num2;;
temp=0xfe;
P1=temp;
wela=1;
P0=0xff;
wela=0;
while(1)
{
bee=0;
num++;

if(num==8)
{
num=0;
num1++;
if(num1==10)
{
num1=0;
num2++;
if(num2==10)
num2==0;
dula=1;
P0=table[num2];
dula="0";

wela="1";
P0=0xfe;
wela=0;
delay(100); //十位数码管显示
}
dula=1;
P0=table[num1];
dula="0";
wela="1";
P0=0xfd;
wela=0; //个位数码管显示
}

delay(20);
P1=0xff;
bee=1;
delay(20);
temp=_crol_(temp,1); //移位
P1=temp;

}


}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
回复

使用道具 举报

368

主题

2017

帖子

4268

积分

论坛元老

Rank: 8Rank: 8

积分
4268
沙发
 楼主| 发表于 2015-2-5 05:36 AM | 只看该作者
建议做led显示用定时器来做延时,原因是节约cpu资源                                                                                                                                                                       
回复 支持 反对

使用道具 举报

368

主题

2017

帖子

4268

积分

论坛元老

Rank: 8Rank: 8

积分
4268
板凳
 楼主| 发表于 2015-2-5 06:04 AM | 只看该作者
目前的中断定时我还不是很熟悉,正在学习这部分,呵呵                                                                                                                                                                       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表