1、首先数码管分为1位,4位,8位,4位和8位的又分为共阴和共阳数码管。
2、共阳数码管,即阳极全部连接在一起,单片机接口给低电位即可点亮对应的段位。
3、可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7进行计时并在数码管上显示时间,作为按键的入口。
4、共阴数码管,即阴极全部连接在一起,单片机接口给高电位即可点亮对应的段位。
5、其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。
#include <mega16.h>#include <delay.h>
//数据信号 发送的数据 高电平high 1 低电平low pc0接74HC595的数据输入圈
#define HC595_DATA_HIGH PORTC |=(1<<0)
#define HC595_DATA_LOW PORTC &=~(1<<0)
//输出锁存信号线
#define HC595_LCLK_HIGH PORTC |=(1<<1)
#define HC595_LCLK_LOW PORTC &=~(1<<1)
//输入时钟线 把数据写入74HC595 pc0只决定电平大小 给上升沿才能输入
#define HC595_SCLK(串行时钟)_HIGH PORTC |=(1<<2)
#define HC595_SCLK_LOW PORTC &=~(1<<2)
//共阴数码表
unsigned char segnum[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x7c}
void Send74HC595(unsigned char data)
{
unsigned char i=0
for(i=0i<8i++)
{
if(data &0x80)//先发高位
HC595_DATA_HIGH
else
HC595_DATA_LOW
HC595_SCLK_HIGH//给一个上升沿
delay_us(2)
HC595_SCLK_LOW//给一个下降沿
data<<=1 //数据位移
}
}
void HC595Display(unsigned char num,unsigned char data)
{
HC595_LCLK_LOW
HC595_SCLK_LOW
Send74HC595(~(0x01<<num))//发送位选
Send74HC595(segnum[data])//发送段选
HC595_LCLK_HIGH//上升输出锁存
delay_us(2)
}
void main (void)
{
MCUCSR=0x80
MCUCSR=0x80
DDRC|=(1<<0)|(1<<1)|(1<<2)// DDRC 不能=某值 它使pc0 pc1 pc2打开
while (1)
{
HC595Display(0,1)
HC595Display(1,2)
HC595Display(2,10)
HC595Display(3,0)
HC595Display(4,3)
HC595Display(5,10)
HC595Display(6,1)
HC595Display(7,0)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)