找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5467|回复: 6
打印 上一主题 下一主题
收起左侧

刚写的一个很简单的程序……

[复制链接]
跳转到指定楼层
楼主
ID:3324 发表于 2010-6-10 22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include< reg52.h>
#include< intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
//数码管显示十六进制,从0到f
uchar code select[]={7,6,5,4,3,2,1,0};
//位选数组,自左至右
uchar tt0,tt1;
uint temp1=0xfe;
uint temp=432;
void alllight();
void delay(uint z);

void init()   //初始化函数
{
 TMOD=0x11;  //定时器0工作在方式一
 TH0=(65536-50000)/256;  //装入初值
 TL0=(65536-50000)%256;
 TH1=(65536-50000)/256;  //装入初值
 TL1=(65536-50000)%256;
 EA=1;   //开总中断
 ET0=1;   //开定时器0中断
 ET1=1;
 TR0=1;
 TR1=1;   //计时开始
}

void Timer0() interrupt 1  //定时器0中断子程序
{
 TH0=(65536-50000)/256;  //再次装入初值
 TL0=(65536-50000)%256;
 tt0++;
}

void Timer1() interrupt 3  //定时器1中断子程序
{
 TH0=(65536-50000)/256;  //再次装入初值
 TL0=(65536-50000)%256;
 tt1++;
}


void display(uint temp)   //显示子程序
{
 uint bai,shi,ge;
 bai=temp/100;
 shi=temp%100/10;
 ge=temp%100%10;
 
 if(bai!=0)    //此处的判断是为了消除重影,不然当没有到100时,百位上总会有一个0在隐隐约约的显示
  { 
  P0=disp[bai];  //显示百位
  P2=select[2];
  delay(1);    //延时0.1s左右
  }
   
  P0=disp[shi];  //显示十位
  P2=select[1];
  delay(1);
  
  P0=disp[ge];  //显示个位
  P2=select[0];
  delay(1);
}


void delay(uint z)   //延时子函数,z为传递的参数,用来决定延时时间的长短,若z为1,延时时间大概为0.001s
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=10;y>0;y--); 
}

void main()
{
 init();
 
 while(1)
 {
  if(tt1!=2)   //数码管显示程序段
  {
   P0=disp[7];  //显示高三位的765
   P2=select[5];
   delay(1); 

   P0=disp[6]; 
   P2=select[4];
   delay(1);

   P0=disp[5]; 
   P2=select[3];
   delay(1);

   display(temp);
  }
  else if(tt1==2)
  {
   
   tt1=0;
   if(temp==398)
   {
    TR1=0;
   }
   else
   {
    temp--;
   }
  }

  
  if(tt0==10)   //流水灯程序段
  {
   tt0=0;
   
   {
    if(temp==398)
     alllight();
   }
   temp1=_crol_(temp1,1);
   P1=temp1;
  }

 }
}

void alllight()   //数码管停止后的动作
{
 while(tt0<=60)
 {
  temp1=0xff;  
  if(tt0%10==0)
  {
   P1=~temp1; 
  }
  
  P0=disp[7];  //显示高三位的765
  P2=select[5];
  delay(1); 

  P0=disp[6]; 
  P2=select[4];
  delay(1);

  P0=disp[5]; 
  P2=select[3];
  delay(1);

  display(temp);
 }
 
 while(1)
 {
  P1=0xff;
  P0=0x76;  //显示字母H
  P2=3;
  delay(1);

  P0=0x79;  //显示字母E
  P2=4;
  delay(1);

  P0=0x38;  //显示字母L
  P2=5;
  delay(1);

  P0=0x38;  //显示字母L
  P2=6;
  delay(1);

  P0=0x3f;  //显示字母O
  P2=7;
  delay(1);
    
 }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:23004 发表于 2010-6-10 22:46 | 只看该作者
又现一单片机爱好者。。。。
回复

使用道具 举报

板凳
ID:22246 发表于 2010-6-10 22:52 | 只看该作者
又有数码管又有流水灯,看来是高手
回复

使用道具 举报

地板
ID:24515 发表于 2010-6-17 15:48 | 只看该作者
谢谢分享!
回复

使用道具 举报

5#
ID:24326 发表于 2010-6-24 02:10 | 只看该作者
楼主 你不厚道 这个程序 我一看就知道是某个教程里面的 流水灯和数码管以及延时功能的一个例子
回复

使用道具 举报

6#
ID:17098 发表于 2010-7-17 21:00 | 只看该作者

高手,可我是初学,不懂

回复

使用道具 举报

7#
ID:25111 发表于 2010-7-19 10:11 | 只看该作者
确实不厚道,这个程序前几天我刚看到,是郭老师写的吧
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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