首页 > 程序 > 51单片机第六天

作者:ghostry 发布时间:2016-08-02 浏览: 3634

转载注明出处: https://blog.1ge.fun/program/724.html

买的设备终于送到了。开始实测。
依次进行了流水灯,数码管静态显示,数码管动态显示,

下面放源码
流水灯

#include<8052.h>
#define uint unsigned int
#define uchar unsigned char

void sleep(uint k)
{
    uint i,j;
    for(i=k;i>0;i--)
        for(j=66;j>0;j--);
}

void main(void)
{
    while(1)
    {
        P1=0x7F;
        sleep(1000);
        P1=0xBF;
        sleep(1000);
        P1=0xDF;
        sleep(1000);
        P1=0xeF;
        sleep(1000);
        P1=0xf7;
        sleep(1000);
        P1=0xfb;
        sleep(1000);
        P1=0xfd;
        sleep(1000);
        P1=0xfe;
        sleep(1000);
    }
}

静态显示数码管

#include<8052.h>
#define uint unsigned int
#define uchar unsigned char
//duanxuan P2_6,weixuan P2_7
uchar num;
uchar table[]={
0B00111111,0B00000110,0b01011011,0b01001111,0b01100110,0b01101101,
0B01111101,0B00000111,0b01111111,0b01101111,0b01110111,0b01111111,
0B00111001,0B00111111,0b01111001,0b01110001,
};
void sleep(uint k)
{
    uint i,j;
    for(i=k;i>0;i--)
        for(j=66;j>0;j--);
}
void display(uchar x){
    P0=table[x];
    P2_6=1;
    P2_6=0;
}
void main(void)
{
    P0=0B11000000;
    P2_7=1;
    P2_7=0;
    while(1){
        display(num);
        num++;
        if(num==16)num=0;
        sleep(1000);
    }
}

动态显示数码管

#include<8052.h>
#define uint unsigned int
#define uchar unsigned char
//duanxuan P2_6,weixuan P2_7
uchar time1;
uchar nums[]={1,2,3,4,5,6};
void sleep(uint k)
{
    uint i,j;
    for(i=k;i>0;i--)
        for(j=66;j>0;j--);
}
void display(uchar _nums[]){    
    uchar table[]={
    0B00111111,0B00000110,0b01011011,0b01001111,0b01100110,0b01101101,
    0B01111101,0B00000111,0b01111111,0b01101111,0b01110111,0b01111111,
    0B00111001,0B00111111,0b01111001,0b01110001,
    };
    uchar wei[]={0b11011111,0b11101111,0b11110111,0b11111011,0b11111101,0b11111110,};
    uchar ii,jj;
    for(ii=0;ii<6;ii++){
        P0=wei[ii];
        P2_7=1;
        P2_7=0;
    
        jj=_nums[ii];
        P0=table[jj];
        P2_6=1;
        sleep(3);
        P0=0;
        P2_6=0;
    }
}
void main(void)
{
    while(1)display(nums);
}

静态显示,流水灯都没什么。动态显示数码管可折腾死了,显示有错位暗影。
捣鼓了一天,终于发现是位变更的时候,段输出的是前一个位的内容,所以在段打开显示需要的数字后锁存成不显示。也就是亮后灭掉,再显示下一个。
烧录方面也是折腾,刚开尝试用gSTCISP总是不行。然后就用了vbox虚机。但是总觉得虚机不方便。终于最后找到了stcflash非常好用。只需要复制stcflash.py到项目目录,然后./stcflash.py xx.hex就行了。

标签: 51单片机

上一篇: 51单片机第五天
下一篇: 51单片机第七天

添加新评论 »

*
*

欢迎评论!歡迎評論!Comments welcome!komentoj bonvenaj!댓글 오신 것을 환영합니다!
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: :cold: :cryy: :cute: :shy: :sleep: :struggle: :tea: :yahou: