欢迎来金海湾博客
Edward199

https://blog.jinbay.com/Edward199/  复制链接收藏

Edward199个人头像
Edward199
博客日历
«February 2025»
1
2345678
9101112131415
16171819202122
232425262728
博客自定义分类
5/30/2009 2:39:00 AM [语言学习] 分享

分享

实验程序:让数码管第一秒第一位亮1,过一秒第二位亮2,如此类推。
程序如下:
#include                                     //定义头文件
#define uint unsigned int                             //定义变量类型
#define uchar unsigned char                       //定义变量类型
uchar aa,numdu,numwe;                            //变量声明
sbit dula=P2^6;                        //定义段选
sbit wela=P2^7;                                         //定义位选
 
uchar code table[]={                   //段选数组
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};                                                     
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};   //位选数组
 
void main()                                                                           //主函数开始
{
       numdu=0;                           //段选清零
       numwe=0;                           //位选清零
       aa=0;                   //变量aa清零
       TMOD=0x01;                             //规定定时器工作方式
       TH0=(65536-50000)/256;
       TL0=(65536-50000)%256;       //给定时器赋初值50毫秒
    EA=1;                        //总中断开
       ET0=1;                       //定时器0中断开
       TR0=1;                       //定时器0开始工作
 
 
 
 
       while(1)                       //主循环开始
       {
              if(aa==20)                  //如果aa进行了20次中断也就是延时了1秒钟
              {
                     aa=0;
                     numdu++;               //段选加1,从1开始变化
                     if(numdu==7)            //如果段选从1变到6
                            numdu=1;                     //段选变回1
                            dula=1;              //段选开
                            P0=table[numdu];     //讲段选值1送给P0口显示
                            dula=0;                         //段选关
                            wela=1;              //位选开
                            P0=tablewe[numwe];   //讲位选0位送P0口,只让第一位亮
                            wela=0;                        //位选关
                            numwe++;                    //一秒后位选加1
                            if(numwe==6)
                                   numwe=0;        //位选变到第6位后回到第一位显示
              }
       }
}
 
void time0() interrupt 1                 //中断函数
{
       TH0=(65536-50000)/256;                  
       TL0=(65536-50000)%256;                  //中断函数初值
       aa++;
             
}
 
此程序完成的功能就是让数码管间隔一秒从左往右显示1~6的数字
间隔的1秒钟时间采用了定时器延时
如果将间隔的时间调短,当时间短到人眼的余晖24MS内时,看到的就是固定不变的123456了
其实数字在不停的闪烁移动。这就是所谓的动态扫描
可能是因为显示器刷新率的原因 间隔时间调的非常短以后仿真会因为速度太快而无法显示。

实验程序:让数码管显示12 动态扫描用延时函数延时
程序:
#include                                     定义头文件
 
#define uint unsigned int
#define uchar unsigned char                       定义变量
 
uchar numdu,temp,shi,ge;                          声明变量
 
sbit dula=P2^6;
sbit wela=P2^7;                                         定义段选、位选
 
uchar code table[]={                                  数码显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
 
void delay(uint z);                                      子程序声明
 
 
void main()                                               主函数
{
       temp=12;                                           让变量temp等于12
       numdu=0;                        段选清零
    while(1)                                            主循环
       {
              shi=temp/10;
              ge=temp%10;                             十位、个位分离
 
              dula=1;
              P0=table[shi];                             把十位数对应的编码送给P0口
              dula=0;
 
              wela=1;
              P0=0xfe;                                    让十位的数码管亮
              wela=0;
              delay(40);                                   延时一会
 
             dula=1;
              P0=table[ge];                 把个位数对应的编码送给P0口
              dula=0;
 
              wela=1;
              P0=0xfd;                                    让个位的数码管亮
              wela=0;
              delay(40);                                   延时一会
       }
    
}
 
void delay(uint z)                            延时子程序
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=110;y>0;y--);      
}
PROTEUS视频演示
 
注意:由于temp定义成了uchar型变量所以他的最高取值范围是255 。
 
还可以把显示函数做成子程序用来调用
实验程序:让数码管显示152
程序如下:
#include                                     定义头文件
 
#define uint unsigned int
#define uchar unsigned char                       定义变量
 
uchar numdu,temp,shi,ge;                          声明变量
 
sbit dula=P2^6;
sbit wela=P2^7;                                         定义位选、段选
 
uchar code table[]={                                  数码管显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
 
void delay(uint z);                                            声明延时子程序
void display (uchar bai,uchar shi,uchar ge);         声明显示子程序
 
 
void main()                                                      主程序
{
       temp=152;                                                让temp等于152
       numdu=0;                                                 段选清零
bai=temp/100;
       shi=temp%100/10;
       ge=temp%10;                                           将百位、十位、个位清零
    while(1)                                                   开始主循环
       {  
         display(bai,shi.ge);                              调用显示子程序
 
       }
    
}
 
void delay(uint z)                                   延时子程序
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=110;y>0;y--);      
}
void display (uchar bai,uchar shi,uchar ge);         显示子程序
{
           dula=1;
              P0=table[bai];
              dula=0;
 
              wela=1;
              P0=0xfe;
              wela=0;
              delay(5);
 
             dula=1;
              P0=table[shi];
              dula=0;
 
              wela=1;
              P0=0xfd;
              wela=0;
              delay(5);
 
              dula=1;
              P0=table[ge];
              dula=0;
 
              wela=1;
              P0=0xfb;
              wela=0;
              delay(5);
}
实验程序:让数码管显示个、十、百位,从0~200隔一秒加一
程序如下:
#include               定义头文件
 
#define uint unsigned int
#define uchar unsigned char        定义变量
 
uchar  aa,temp,bai,shi,ge;                  声明变量
 
sbit dula=P2^6;
sbit wela=P2^7;                                  定义段选、位选
 
uchar code table[]={                           数码管显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
 
void delay(uint z);                                   延时子程序声明
void display(uchar bai,uchar shi,uchar ge);    显示子程序声明
void init();                              初始化子程序声明
 
void main()                                              
{
       init();//初始化子程序
 
       while(1)
       {
              if(aa==20)                        如果aa=20进行了20次中断也就是1秒钟
                     {     aa=0;
                            temp++;                              temp值加1
                            if(temp==200)            加到200返回
                                   {
                                   temp=0;
                                   }
                            bai=temp/100;
                            shi=temp%100/10;
                            ge=temp%10;              个十百位分离
                     }
         display(bai,shi,ge);                    调用显示子程序
       }
}
 
void delay(uint z)              延时子程序
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=110;y>0;y--);      
}
 
void display(uchar bai,uchar shi,uchar ge)      显示子程序
{
       dula=1;
       P0=table[bai];
       dula=0;
 
       wela=1;
       P0=0xfe;
       wela=0;
       delay(5);
 
    dula=1;
       P0=table[shi];
       dula=0;
 
       wela=1;
       P0=0xfd;
       wela=0;
       delay(5);
 
       dula=1;
       P0=table[ge];
       dula=0;
 
       wela=1;
       P0=0xfb;
       wela=0;
       delay(5);
}
void init()        初始化子程序
{
       temp=0;
       TMOD=0x01;
       TH0=(65536-50000)/256;
       TL0=(65536-50000)%256;
       EA=1;
       ET0=1;
       TR0=1;
}
void timer0() interrupt 1     定时器中断子程序
{
       TH0=(65536-50000)/256;
       TL0=(65536-50000)%256;
       aa++;
}
 
 阅读全文>>

评论

分享 分享

对话:

我要刊登广告
我要刊登广告
5/30/2009 1:55:00 AM [车辆-E.V.] 分享

分享

人一生当中不知要经历多少爱情、亲情和友情,在这用千情万丝编织的错综复杂的情感世界中,每个人都在寻找属于自己的幸福的终点。   两个相爱的人,不需要强调你为他做了什么,或是他为你做了什么,重要的是你们两个人,一起做了什么。同甘不难,重要的是共苦,当彼此互相搀扶度过劫难,那便是你们爱情当中,最美丽的蝴蝶结。   有时候觉得,相爱的两个人之所以会吵架,很多时候是因为生活太过于平静安逸,但当两个人共同面临劫难的时候,曾经让你们喋喋不休的牢骚立马会烟消云散。   爱,体现在生活中的点点滴滴,一份关怀,一个微笑,一个拥抱,甚至一个回眸注视,都足可以化解心中所有的怨气。在人生最困难的时候,假使有一个人全心全意的,站在你身边鼓励你、支持你,成为你整个世界的支柱,那又是件多么幸福的事。   在任何事情都追求速度的今天,爱情也变了味道。相比之下,战争的炮火、生命的威胁更能让一份爱情深刻;而在和平年代里的爱,更需要的是一份关怀、体贴、理解、包容和忍让。现代的爱情更需要用心去栽培,用心去灌溉,用心去呵护,从而让人更去释怀点什么。   往往在人们眼里看似如此简单的爱情,却是如此复杂而萦绕……   也许,爱情,它更需要的是一份努力。 让爱情新鲜刺激的18个小创意 女孩应该这样让自己活得漂亮 如果我是平胸,你还会爱我吗 女人与男人约会的12个潜规则 你有让异性心痒痒的本事吗? 男人迷恋情妇的五大惊人理由 单身女人生存的八大必备物质 恋人间一定要有的60个小浪漫

阅读(68)评论(0)

5/30/2009 1:51:00 AM [影视-音乐] 分享

分享

一、填空题(每空1分,共40分)</STRONG>
1、歌剧《白毛女》是我国歌剧成型的标志。
2、音乐是(时间)的艺术,(空间)的艺术,(情感)的艺术,( )的艺术。
3、三连音是将基本音符分成均等的(三等分)来代替基本划分的(二等分)。
4、五连音是将基本音符分成均等的(五等分)来代替基本划分的(四等分)。
5、三和弦共有三个音,以根音为低音时叫(原位和弦),以三音为低音时叫(六和弦),即三和弦的第一转位用数字(6)标记,以五音为低音时叫(四六和弦),即第二转位用数字( 4 )标记。
6、《卡门序曲》的作者是(比才),《合唱交响曲》的作者是(贝多芬)。
7、五种不同类型的切分节奏:(××       ×│,××. │,××—×│,××│××│,×××│)。
8、提倡学科综合,在实施过程中,综合应以(音乐)为教学主线,通过具体的(音乐材料)构建起与其他艺术门类及其他学科的联系。
9、根据中低年级学生的身心特点,从(音乐基本要素)入手,通过模仿,积累感性经验,为音乐喜欢和创造能力的进一步发展,奠定基础。
10、我国民歌一般分为(山歌、号子、小调)三种基本体裁。
11、我国民族乐器

阅读(170)评论(0)

© 2025 Jinbay.com All rights reserved. 版权所有金海湾。 未经许可,不得转载。