做温度计的实验
可以在keil上调试全速运行数码管有显示
但是 烧录到单片机就没办法了
/****************************************************************** ** FileName: 温度测量实验 ** Copyright (c) 2000-2011 **** The company technology development department ** Creater: ** Date: ** Modifier: ZQS ** Date: 2011-7 ** Comment: QQ群:154270214 ** version: VER 1.0 ********************************************************************/ #include <absacc.h> //包含了绝对地址访问的宏定义 #include <reg51.h> #define LEDLen 6 #define MODE 0x03 #define CS0809 XBYTE[0xa000] // YC2片选ad0809 定义数组符CS0809的实际含义为XBYTE[0xa000],即实际地址为外部寻址空间中的0xa000 #define CAddr XBYTE[0xe100] // 8155命令控制字地址 #define OUTBIT XBYTE[0xe101] // 位控制口 8155PA口 #define CLK164 XBYTE[0xe102] // 段控制口(接164时钟位)8155PB口 #define DAT164 XBYTE[0xe102] // 段控制口(接164数据位) #define IN XBYTE[0xe103] // 键盘读入口 8155PB口 unsigned char LEDBuf[LEDLen]; // 显示缓冲 code unsigned char LEDMAP[] = { // 八段管显示码 0-F 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; /***************************************************************** ** Function: Delay ** Input: unsigned char CNT ** Output: ** Description: 延时函数 ****************************************************************/ void Delay(unsigned char CNT) { unsigned char i; //定义一个无符号变量 while (CNT-- !=0) //while判断语句 for (i=100; i !=0; i--); //for循环 } /***************************************************************** ** Function: DisplayLED() 数码管显示函数 ** Input: ** Output: ** Description: 通过164串入并出输出数码管段码,通过Pos移位操作给出位码 ****************************************************************/ void DisplayLED() { unsigned char i, j; unsigned char Pos; unsigned char LED; Pos = 0x20; // 从左边开始显示 for (i = 0; i < LEDLen; i++) { OUTBIT = 0; // 关所有八段管 LED = LEDBuf; for (j = 0; j < 8; j++) { // 送164 串入并出高位移出操作 if (LED & 0x80) DAT164 = 1; else DAT164 = 0;//如果高位为一则选择,输出dat引脚输出为高否则为1 CLK164 = CLK164|0x02; // PB1=1时钟传送 CLK164 = CLK164&0xfd; // PB1=0 LED <<= 1; } OUTBIT = Pos; // 显示一位八段管 Delay(1); Pos >>= 1; // 显示下一位 } OUTBIT = 0; // 关所有八段管 } unsigned char Read0809() { unsigned char i; CS0809 = 0; // 起动 A/D for (i=0; i<0x20; i++) ; // 延时 > 100us return(CS0809); // 读入结果 } /***************************************************************** ** Function: main() ** Input: ** Output: ** Description: ****************************************************************/ void main() { unsigned char j; CAddr= MODE; while(1) { //数码管初始化“H---00” LEDBuf[0] = 0Xb8; LEDBuf[1] = 0X40; LEDBuf[2] = 0X40; LEDBuf[3] = 0X40; LEDBuf[4] = 0X00; LEDBuf[5] = 0X00; LEDBuf[5] = LEDMAP[Read0809() & 0x0f] ; // 数码管个位显示 LEDBuf[4] = LEDMAP[Read0809()>>4 & 0x0f] ; // 数码管十位显示 for(j=0; j<5; j++) DisplayLED(); //数码管显示函数调用 } }
|