求用AT89S51单片机构成的0-99加法计数器电路图和C语言源程序…要求用proteus仿真,显示屏用7段数码管…
1个回答
展开全部
#include<reg51.h> //一个百位数0~100循环显示 #define uint unsigned int #define uchar unsigned char uchar temp,aa,bai,shi,ge; sbit dula=P2^6; //位段选 sbit wela=P2^7; uchar code table[]={ //数码管循环显示0~f 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display(uchar bai,uchar shi,uchar ge);//显示子程序声明 void delay(uint z); //延时函数 void init(); //初始化函数 void main() { init(); //初始化子程序 while(1) { if(aa==20) //检测到1s { aa=0; temp++; if(temp==100) //判断是否到显示值 { 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) { wela=1; P0=0xfe; //百位选通 wela=0; delay(50); dula=1; P0=table[bai]; dula=0; //送百位 P0=0xff; //消隐 wela=1; P0=0xfd; wela=0; delay(50); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(50); dula=1; P0=table[ge]; dula=0; P0=0xff; } void init() //初始化函数(定时器,显示值) { wela=0; dula=0; 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++; }
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询