代码见附件部分
单片机源程序如下:
- /***************************************************************************************************
- 工程名称: smg_0.1~9.9
- 功能描述: 控制数码管低2位显示从0.1到9.9累加,步进为0.1
- 硬件连接: 用8位杜邦线将J8与J12连接,2位杜邦线分别将J11_0与J15_DS1、J11_1与J15_DS2连接。
- 维护记录: 2011-8-22
- ***************************************************************************************************/
- #include "reg51.h" //包含头文件
- sbit LE1=P2^0; //位选573锁存器使能
- sbit LE2=P2^1; //段选573锁存器使能
- #define uchar unsigned char
- #define uint unsigned int
- uchar wei;
- float num;
- uchar code dis[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
- // 0 1 2 3 4 5 6 7
- 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F的段码
- // 8 9 A B C D E F
- //**************************************************************************************************
- //延时函数
- //**************************************************************************************************
- delay(uint time) //int型数据为16位,所以最大值为65535
- {
- uint i,j; //定义变量i,j,用于循环语句
- for(i=0;i<time;i++) //for循环,循环50*time次
- for(j=0;j<50;j++); //for循环,循环50次
- }
- //**************************************************************************************************
- //动态扫描函数
- //**************************************************************************************************
- scan()
- {
- uchar i;
- for(i=0;i<10;i++)
- {
- //显示个位
- P1=0xbf; //0xbf=1011 1111,即选通个位
- LE1=1; //锁存位
- LE1=0; //断开锁存,位选573的Q7~Q0仍保持
- wei=num*10;
- P1=dis[wei/10] | 0x80; //dis[wei/10]为0~9的编码,0x80为小数点
- LE2=1; //锁存段码
- LE2=0; //断开锁存,段选573的Q7~Q0仍保持
- delay(100); //延时保持一下,延时过大会闪动,延时过小会有重影
- P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影
- //显示十分位
- P1=0x7f; //0xbf=0111 1111,即选通十分位
- LE1=1; //锁存位
- LE1=0; //断开锁存,位选573的Q7~Q0仍保持
- wei=num*10;
- P1=dis[wei%10]; //0~9的编码
- LE2=1; //锁存段码
- LE2=0; //断开锁存,段选573的Q7~Q0仍保持
- delay(100); //延时保持一下,延时过大会闪动,延时过小会有重影
- P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影
- }
- if(num==9.9)num=0; //扫描到显示9.9时,重新开始扫描
- num+=0.1; //num加0.1
- }
- //**************************************************************************************************
- //主函数
- //**************************************************************************************************
- void main() //主函数
- {
- num=0; //初始化段码为0
- while(1) //进入while死循环
- {
- scan(); //数码管扫描函数
- }
- }
复制代码
所有资料51hei提供下载:
EX2.6 0.1~9.9累加.zip
(18.78 KB, 下载次数: 5)
|