/****************************************************************
外部晶振8M
PA0~3:四位數碼管的位選
PB0~7:數碼管的8位段選
外部中斷0用于計數
定時器0溢出中斷的定時為1ms
說明 :檢測到水流較小時,繼電器延時1秒關閉
******************************************************************/
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //數碼管段選
char position[4]={0xfe,0xfd,0xfb,0xf7};//數碼管位選
uint sumnum=0; //用于記錄1000ms內進入中斷的次數
uint time=0; //記錄進入比較定時器0的次數
uint num=0; //記錄1ms內進入中斷的次數
uint count=0; //進入外部中斷0的次數
uchar flag;
uint sumnum1; //記錄100ms內的數目
/***************************函數聲明***************************/
void delay();
void display(uint m );
void init();
void init_0();
void init_2();
void _delay_us(uint l)
{
unsigned int i;
for(i=0;i<l;i++)
{
asm("nop");
}
}
/**************************主函數***********************************/
void main()
{
init();
init_0();
init_2();
while(sumnum<5)
{
PORTD=0XBF;
segdisplay(sumnum1);
}
while(1)
{
segdisplay(sumnum1);
}
}
/*************************掃描數碼管時的延時函數*********************/
void delay()
{
uchar i,j;
for(i=6;i>0;i--)
for(j=225;j>0;j--);
}
/************************數碼管顯示函數*****************************/
void segdisplay( int temp)
{
int seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int temp1,temp2,temp3,temp4;
temp1=temp/1000;
temp2=(temp/100)%10;
temp3=(temp/10)%10;
temp4=temp%10;
DDRB=0xff;
DDRA|=0x0f;
PORTA=~BIT(3);
PORTB=seg[temp1];
_delay_us(100);
PORTA=~BIT(2);
PORTB=seg[temp2];
_delay_us(100);
PORTA=~BIT(1);
PORTB=seg[temp3];
_delay_us(100);
PORTA=~BIT(0);
PORTB=seg[temp4];
_delay_us(100);
}
/***********************管腳初始化函數*********************/
void init()
{
DDRD|=0X40; //PD4 設置為輸出
PORTD=0XBF;
DDRA=0XFF;
DDRB=0XFF;
PORTA=0XFF;
PORTB=0XFF;
}
/***********************外部中斷0初始化*********************/
void init_0()
{
MCUCR=0X02; //INT0為下降沿觸發
GICR=0X40; //使能INT0中斷
SREG=0X80; //使能總中斷
}
/**********************定時器2初始化***********************/
void init_2()
{
TCCR0=0x03; // 內部時鐘,64 分頻(8M/64=125KHz)
TCNT0=0x83; //裝初值
TIMSK=0x01; // 允許 T/C0溢出中斷中斷
}
/***********************外部中斷0子函數********************/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
count++;
}
/*********************定時計數器0溢出中斷子函數*****************/
#pragma interrupt_handler int0_over:10
void int0_over(void)
{
TCNT0=0x83; //重裝初值
if((time%100) == 0)
sumnum1 = num;
if(time == 1000)
{
sumnum=num;
if(sumnum<10)
{
if((flag==1)&&(sumnum<10))
{
PORTD=0XFF;
flag=0;
}
flag++;
}
else
PORTD=0XBF;
num=0;
time=0;
}
num+=count;
count=0;
++time;
}
標簽:
C語言
上傳時間:
2016-03-09
上傳用戶:彥 yan
#include <stdio.h>
#include <stdlib.h>
#define SMAX 100
typedef struct SPNode
{
int i,j,v;
}SPNode;
struct sparmatrix
{
int rows,cols,terms;
SPNode data [SMAX];
};
sparmatrix CreateSparmatrix()
{
sparmatrix A;
printf("\n\t\t請輸入稀疏矩陣的行數,列數和非零元素個數(用逗號隔開):");
scanf("%d,%d,%d",&A.cols,&A.terms);
for(int n=0;n<=A.terms-1;n++)
{
printf("\n\t\t輸入非零元素值(格式:行號,列號,值):");
scanf("%d,%d,%d",&A.data[n].i,&A.data[n].j,&A.data[n].v);
}
return A;
}
void ShowSparmatrix(sparmatrix A)
{
int k;
printf("\n\t\t");
for(int x=0;x<=A.rows-1;x++)
{
for(int y=0;y<=A.cols-1;y++)
{
k=0;
for(int n=0;n<=A.terms-1;n++)
{
if((A.data[n].i-1==x)&&(A.data[n].j-1==y))
{
printf("%8d",A.data[n].v);
k=1;
}
}
if(k==0)
printf("%8d",k);
}
printf("\n\t\t");
}
}
void sumsparmatrix(sparmatrix A)
{
SPNode *p;
p=(SPNode*)malloc(sizeof(SPNode));
p->v=0;
int k;
k=0;
printf("\n\t\t");
for(int x=0;x<=A.rows-1;x++)
{
for(int y=0;y<=A.cols-1;y++)
{
for(int n=0;n<=A.terms;n++)
{
if((A.data[n].i==x)&&(A.data[n].j==y)&&(x==y))
{
p->v=p->v+A.data[n].v;
k=1;
}
}
}
printf("\n\t\t");
}
if(k==1)
printf("\n\t\t對角線元素的和::%d\n",p->v);
else
printf("\n\t\t對角線元素的和為::0");
}
int main()
{
int ch=1,choice;
struct sparmatrix A;
A.terms=0;
while(ch)
{
printf("\n");
printf("\n\t\t 稀疏矩陣的三元組系統 ");
printf("\n\t\t*********************************");
printf("\n\t\t 1------------創建 ");
printf("\n\t\t 2------------顯示 ");
printf("\n\t\t 3------------求對角線元素和");
printf("\n\t\t 4------------返回 ");
printf("\n\t\t*********************************");
printf("\n\t\t請選擇菜單號(0-3):");
scanf("%d",&choice);
switch(choice)
{
case 1:
A=CreateSparmatrix();
break;
case 2:
ShowSparmatrix(A);
break;
case 3:
SumSparmatrix(A);
break;
default:
system("cls");
printf("\n\t\t輸入錯誤!請重新輸入!\n");
break;
}
if (choice==1||choice==2||choice==3)
{
printf("\n\t\t");
system("pause");
system("cls");
}
else
system("cls");
}
}
標簽:
數組
子系統
上傳時間:
2020-06-11
上傳用戶:ccccy