首页 > 程序 > 51单片机第六天
作者:ghostry 发布时间:2016-08-02 浏览: 3653
转载注明出处: https://blog.ghostry.cn/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单片机第七天