单片机C语言程序设计实训100例—基于8051+Proteus仿真(2)

2019-04-13 23:07

/* 名称:单只数码管循环显示0~9 */

#include #include

#define uchar unsigned char #define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //延时

void DelayMS(uint x) { uchar t;

while(x--) for(t=0;t<120;t++); }

//主程序 void main() {

uchar i=0; P0=0x00; while(1) {

/*

说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);} //注:另一方案 */ }

07 8只数码管滚动显示单个数字

/* 名称:8只数码管滚动显示单个数字 说明:数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管 */

#include #include

#define uchar unsigned char

#define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //延时

void DelayMS(uint x) {

6

}

P0=~DSY_CODE[i]; i=(i+1); DelayMS(300);

uchar t;

while(x--) for(t=0;t<120;t++);

}

//主程序

void main() { uchar i,wei=0x80; while(1) { for(i=0;i<8;i++) { P2=0xff; //关闭显示

wei=_crol_(wei,1);

P0=DSY_CODE[i]; //发送数字段码 P2=wei; //发送位码 DelayMS(300);

}

}

}

08 8只数码管动态显示多个不同字符

电路如上图

/* 名称:8只数码管动态显示多个不同字符 说明:数码管动态扫描显示0~7。 */

#include #include

#define uchar unsigned char #define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //延时

void DelayMS(uint x) { uchar t;

while(x--) for(t=0;t<120;t++); }

//主程序 void main() { uchar i,wei=0x80; while(1) { for(i=0;i<8;i++) {

P2=0xff;

7

}

}

}

P0=DSY_CODE[i]; //发送段码 wei=_crol_(wei,1); P2=wei; //发送位码 DelayMS(2);

09 8只数码管闪烁显示数字串

电路如上图

/* 名称:8只数码管闪烁显示数字串

说明:数码管闪烁显示由0~7构成的一串数字

本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。*/

#include #define uchar unsigned char #define uint unsigned int //段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //位码表

uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //延时

void DelayMS(uint x) {

uchar t; while(x--) for(t=0;t<120;t++); }

//主程序 void main() { uchar i,j; while(1) { for(i=0;i<30;i++) { for(j=0;j<8;j++) { P0=0xff;

P0=DSY_CODE[j]; //发送段码

P2=DSY_IDX[j]; //发送位码

DelayMS(2);

}

}

P2=0x00; //关闭所有数码管并延时

DelayMS(1000);

8

}

}

10 8只数码管滚动显示数字串

电路如上图

/* 名称:8只数码管滚动显示数字串 说明:数码管向左滚动显示3个字符构成的数字串 */

#include #include #define uchar unsigned char #define uint unsigned int //段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏) uchar Num[]={10,10,10,10,10,10,10,10,2,9,8}; //延时

void DelayMS(uint x) {

uchar t;

while(x--) for(t=0;t<120;t++); }

//主程序 void main() { uchar i,j,k=0,m=0x80; while(1)

{ //刷新若干次,保持一段时间的稳定显示 for(i=0;i<15;i++) {

for(j=0;j<8;j++)

{ //发送段码,采用环形取法,从第k个开始取第j个 P0=0xff;

P0=DSY_CODE[Num[(k+j)]]; m=_crol_(m,1);

P2=m; //发送位码 DelayMS(2);

}

}

k=(k+1); //环形队列首支针k递增,Num下标范围0~10,故对11取余

}

}

11 K1-K4 控制LED移位

9

/* 名称:K1-K4 控制LED移位 说明:按下K1时,P0口LED上移一位;

按下K2时,P0口LED下移一位; 按下K3时,P2口LED上移一位; 按下K4时,P2口LED下移一位;

*/

#include #include #define uchar unsigned char #define uint unsigned int //延时

void DelayMS(uint x) {

uchar i; while(x--)

for(i=0;i<120;i++); }

//根据P1口的按键移动LED

void Move_LED() {

if ((P1&0x10)==0) P0=_cror_(P0,1); //K1 else if((P1&0x20)==0) P0=_crol_(P0,1); //K2 else if((P1&0x40)==0) P2=_cror_(P2,1); //K3

//K4

else if((P1&0x80)==0) P2=_crol_(P2,1); }

//主程序 void main() { }

uchar Recent_Key; //最近按键 P0=0xfe; P2=0xfe; P1=0xff; Recent_Key=0xff; while(1) { }

if(Recent_Key!=P1) { }

Recent_Key=P1; //保存最近按键 Move_LED(); DelayMS(10);

10


单片机C语言程序设计实训100例—基于8051+Proteus仿真(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湘教版小学六年级美术下册全册教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: