网站导航: 首页 > 设计参考 > 正文 文章搜索
51单片机C语言编程基础及实例
 
文章编号:
090106102159
文章分类: 单片机 51系列
点 击:
...
关 键 词: C语言,基础,实例
文章来源:
网络
摘 要:
基础知识:51单片机编程基础。第一节:单数码管按键显示。第二节:双数码管可调秒表。第三节:十字路口交通灯。第四节:数码管驱动。第五节:键盘驱动。第六节:低频频率计。第七节:电子表。第八节:串行口应用。

第二节:双数码管可调秒表
解:只要满足题目要求,方法越简单越好。由于单片机I/O资源足够,所以双数码管可接成静态显示方式,两个共阴数码管分别接在P1(秒十位)和P2(秒个位)口,它们的共阴极都接地,安排两个按键接在P3.2(十位数调整)和P3.3(个位数调整)上,为了方便计时,选用12MHz的晶体。为了达到精确计时,选用定时器方式2,每计数250重载一次,即250us,定义一整数变量计数重载次数,这样计数4000次即为一秒。定义两个字节变量S10和S1分别计算秒十位和秒个位。编得如下程序:

 

 

 
  1. #include <at89x52.h>       
  2. Code unsigned char Seg7Code[16]= //用十六进数作为数组下标,可直接取得对应的七段编码字节       
  3. // 0     1    2     3     4    5     6     7     8     9    A     b     C     d    E    F       
  4. {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};       
  5. void main( void )       
  6. {       
  7.     unsigned int us250 = 0;       
  8.     unsigned char s10 = 0;       
  9.     unsigned char s1 = 0;       
  10.     unsigned char key10 = 0; //记忆按键状态,为1按下       
  11.     unsigned char key1 = 0;  //记忆按键状态,为1按下       
  12.     //初始化定时器 Timer0       
  13.     TMOD = (TMOD & 0xF0) | 0x02;       
  14.     TH1 = -250; //对于8位二进数来说,-250=6,也就是加250次1时为256,即为0       
  15.     TR1 = 1;       
  16.     while(1)   
  17.     {           //----------循环1       
  18.         P1 = Seg7Code[ s10 ]; //显示秒十位       
  19.         P2 = Seg7Code[ s1 ]; //显示秒个位       
  20.         while( 1 )   
  21.         {         //----------循环2       
  22.             //计时处理       
  23.             if( TF0 == 1 ){       
  24.                 TF0 = 0;       
  25.                 if( ++us250 >= 4000 )   
  26.                 {       
  27.                     us250 = 0;       
  28.                     if( ++s1 >= 10 )   
  29.                     {       
  30.                         s1 = 0;       
  31.                         if( ++s10 >= 6 ) s10 = 0;       
  32.                     }       
  33.                     break//结束“循环2”,修改显示       
  34.                 }       
  35.             }       
  36.             //按十位键处理       
  37.             P3.2 = 1;  //P3.2作为输入,先要输出高电平       
  38.             if( key10 == 1 )   
  39.             { //等松键       
  40.                 if( P3.2 == 1 )    
  41.                     key10=0;       
  42.             }       
  43.             else{   //未按键       
  44.                 if( P3.2 == 0 )   
  45.                 {       
  46.                     key10 = 1;       
  47.                     if( ++s10 >= 6 )    
  48.                         s10 = 0;       
  49.                     break//结束“循环2”,修改显示       
  50.                 }       
  51.             }       
  52.             //按个位键处理       
  53.             P3.3 = 1;  //P3.3作为输入,先要输出高电平       
  54.             if( key1 == 1 ) //等松键       
  55.             {    
  56.                 if( P3.3 == 1 ) key1=0;    
  57.             }       
  58.             else    
  59.             {   //未按键       
  60.                 if( P3.3 == 0 )   
  61.                 {    
  62.                     key1 = 1;       
  63.                     if( ++s1 >= 10 )    
  64.                         s1 = 0;       
  65.                     break//结束“循环2”,修改显示       
  66.                 }       
  67.             }       
  68.         } //循环2’end       
  69.     }//循环1’end       
  70. }//main’end      

 

 
相关文章:

上一页 123456789 下一页
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4