51单片机j基础C程序架构

keil基本步骤:

(1)新建一个工程:Project——New uVision Project

(2)选择型号:AT89C52

(3)新建.c文件:File——new——a.c

保存为:.c后缀

(4)添加.c文件:

(5)编写程序


以下是基本程序架构:很重要的笔记

A.    基本程序框架:(点亮小灯)

#include<reg52.h>

sbit LED=P1^0;

void main (void)

{

   LED=0;  // P1 = 0xfe;

while (1)    

  {

        //空循环

  }

}

 

B.     for循环语句:(小灯循环点亮)

unsigned char i;

for(i=0;i<10;i++)

{;}

执行顺序:i=0; —— i<10; —— {}中的内容—— i++ ——。。。

 

C.     左移/右移(小灯逐个往左/右移动亮)

P1=0xfe;  // P1=0x7f;

for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次

      {

       Delay(50000);

       P1<<=1;   //P1>>=1;

       }

 循环左移/右移:

    for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次

      {

        Delay(50000);

        P1<<=1;   //P1>>=1;

       P1=P1|0x01;  //P1=P1|0x80;

     //左移后,最右端自动赋值0,所以需要该语句赋值1

      }

  P1=0xfe;   //P1=0x7f;        //重新赋初始值

 

D.    数组的使用:

unsigned char code table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xff,0xff,0x00,0x00, 0x55,0x55,0xaa,0xaa};

for(i=0;i<16;i++)

{

 P1=table[i];

     Delay(3000);

}

 

E.     PWM调光

sbit LED0=P1^0;

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0;

     while(1)

{

  LED0=1;

  Delay(6000);

 

for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)

{

  LED0=0;

  Delay(PWM_LOW);

  LED0=1;

Delay(CYCLE-PWM_LOW);

}

 

LED0=0;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)

{

  LED0=0;

  Delay(PWM_LOW);

  LED0=1;

  Delay(CYCLE-PWM_LOW);

}

}

 

F.     共阳数码管显示(循环显示数字)

   unsignedchar code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

   P1=dofly_table[i];

{

   P1=dofly_table[i];

   Delay(60000);

}

 

G.    独立按键(按键控制数码管显示数字) switch选择语句

switch(P3)  //P3口作为独立按键输入端

{

 case0xfe:P1=dofly_table[1];break;

case 0xfd:P1=dofly_table[2];break;

default:break;

}

H.     数码管静态显示:位锁存与段锁存(8位数码管显示其中之一/二)

   #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口 段锁存

sbit LATCH2=P2^3;//                位锁存

main()

{

   while(1)

{

   DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110   之一

//  DataPort=0x7e; //取位码 第一位数码管选通,即二进制0111 1110  之二

   LATCH2=1;     //位锁存

   LATCH2=0;

 

   DataPort=0x4F; //取显示数据,段码 “3”共阴字符码

   LATCH1=1;     //段锁存

   LATCH1=0;

}

}

 

I.       数码管动态显示:位锁存与段锁存

   #define DataPort P0 //定义数据端

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值