proteus

IAR
芯片使用的是MSP430G2553
#include"msp430.h"
/*
南北方向红、黄、绿 对应p0\p1\p2 时间由p2.2与p2.3驱动
东西方向红、黄、绿 对应p5\p6\p7 时间由p2.0与p2.1驱动
*/
unsigned char code_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管数据
void seg71s_S_N(unsigned char date_seg71_s_n){ //南北数码换显示函数
unsigned char data=date_seg71_s_n/10;//传过来数字十的位
unsigned char data_1=date_seg71_s_n%10;//过来数字个的位
unsigned char bit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//八个引脚对应输出
for(unsigned int i=0;i<8;i++){ //循环八次输出数字的十位
P2OUT&=~BIT3; //P2.3输出低电平 p2.3为时钟位
if(code_seg[data]&bit[i]){
P2OUT|=BIT2; //P2.2输出高电平 p2.2为数据位
}
else{
P2OUT&=~BIT2;//P2.2输出低电平
}
P2OUT|=BIT3; //P2.3输出高电平
}
for(unsigned int i=0;i<8;i++){ //再循环八次输出数字的个位
P2OUT&=~BIT3;
if(code_seg[data_1]&bit[i]){
P2OUT|=BIT2; //P2.3输出低电平 p2.3为时钟位
}
else{
P2OUT&=~BIT2; //P2.2输出高电平 p2.2为数据位
}
P2OUT|=BIT3;
}
}
void seg71s_E_W(unsigned char date_seg71_e_w){ //东西数码换显示函数
unsigned char data=date_seg71_e_w/10; //传过来数字十的位
unsigned char data_1=date_seg71_e_w%10; //传过来数字个的位
unsigned char bit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
for(unsigned int i=0;i<8;i++){ //循环八次输出数字的十位
P2OUT&=~BIT1; //P2.1输出低电平 p2.1为时钟位
if(code_seg[data]&bit[i]){
P2OUT|=BIT0; //P2.0输出高电平 p2.0为数据位
}
else{
P2OUT&=~BIT0; //P2.0输出低电平
}
P2OUT|=BIT1; //P2.1输出高电平
}
for(unsigned int i=0;i<8;i++){ //循环八次输出数字的个位
P2OUT&=~BIT1;
if(code_seg[data_1]&bit[i]){
P2OUT|=BIT0;
}
else{
P2OUT&=~BIT0;
}
P2OUT|=BIT1;
}
}
void Delay(void);//一秒延时
void main(void){
WDTCTL=WDTPW+WDTHOLD;
//P1配置
P1SEL=0x00;
P1SEL2=0x00;
P1DIR=0xff;
//P2配置
P2SEL=0x00;
P2SEL2=0x00;
P2DIR=0xff;
//东西绿27秒,南北红27秒
//0x81 0b1000 0001
//东西黄3秒,南北红3秒
//0x41 0b0100 0001
//东西红27秒,南北绿27秒
//0x24 0b0010 0100
//东西红3秒,南北黄3秒
//0x22 0b0010 0010
unsigned char light[4]={0x81,0x41,0x24,0x22};
unsigned char b;
unsigned char c;
while(1){
for(unsigned char i=0;i<4;i++){ //四次一组
P1OUT=light[i];
if(i%2){
for(unsigned char a=3;a>0;a--){ //循环3次
seg71s_S_N(a);
seg71s_E_W(a);
Delay();//一秒延时
}
}
else{
for(unsigned char a=27;a>0;a--){ //循环27次
if(i<2){
b=a;
c=a+3;
}
else{
b=a+3;
c=a;
}
seg71s_S_N(c);
seg71s_E_W(b);
Delay();//一秒延时
}
}
}
}
}
void Delay(void){
unsigned long i;
for(i=0;i<5700;i++){
;
}
}