代码;)在编辑器里总是自动变成笑脸是很讨厌的。。
1.PIT跑马灯
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define LED_data PORTB
#define LED_dir DDRB
void Init_PIT(void) {
PITCFLMT_PITE=0;
PITCE_PCE0=1;
PITMUX_PMUX0=0;
PITMTLD0=200-1 ;
PITLD0=20000-1;
PITINTE_PINTE0=1;
PITCFLMT_PITE=1;
}
void interrupt 66 PIT0(void) {
PITTF_PTF0=1;
LED_data>>=1;LED_data|=0x80;
if(LED_data==0xff)LED_data=0x7f;
}
void Init_PORT() {
LED_dir=0xff;
LED_data=0x7f;
}
void main(void) {
/* put your own code here */
Init_PORT();
Init_PIT();
EnableInterrupts;
for(; ; ) ;
}
2.数字秒表
计时器最终程序(完整调试无锁相环)
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define CONT_data PORTK
#define CONT_dir DDRK
#define SHOW_data PTP
#define SHOW_dir DDRP
#define LED_data PORTB
#define LED_dir DDRB
const unsigned char DisplayDecode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
const unsigned char KeyDecode[];
unsigned char i,j,Input,point;
unsigned char showbuffer[4];
void Init_PORT()
{
CONT_dir|=0x0f;
SHOW_dir=0xff;
}
void Init_PIT(void)
{
PITCFLMT_PITE=0;
PITCE_PCE0=1;
PITMUX_PMUX0=0;
PITMTLD0=200-1 ;
PITLD0=40000-1;
PITINTE_PINTE0=1;
PITCFLMT_PITE=1;
}
void interrupt 66 PIT0(void) { PITTF_PTF0=1; i++;
if(i== 60){
j=j++ ;i=0;
}
if(j==60){
j=0;
}
}
void delay(unsigned int counter){
unsigned int i,j;
for(i=0;i<counter;i++)
for(j=0;j<4000;j++);
}
void show(unsigned char*showdata,unsigned char point) {
unsigned char DisplayNumber;
unsigned char showcon[4]={
0x01,0x02,0x04,0x08
};
for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++){
CONT_data&=0xf0;
SHOW_data=DisplayDecode[*showdata++] ;
if(DisplayNumber==point)SHOW_data|=0x80;
CONT_data|=showcon[DisplayNumber];
delay(1);
}
}
void main(void) {
/* put your own code here */
Init_PORT();
i=0;
j=0;
Init_PIT();
EnableInterrupts;
for(;; ){showbuffer[0]=i%10;
showbuffer[1]=i/10;
showbuffer[2]=j%10;
showbuffer[3]=j/10;
show(showbuffer,2);
}
}
3.键盘输入周期实现跑马灯
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define CONT_data PORTK
#define CONT_dir DDRK
#define SHOW_data PTP
#define SHOW_dir DDRP
#define LED_data PORTB
#define LED_dir DDRB
#define KEY_data PORTA
#define KEY_dir DDRA
#define ColumnSize 4
#define RowSize 4
unsigned char time=1,i,j,Keyvalue1;
const unsigned char DisplayDecode[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
const unsigned char KeyDecode[]={
0x0d,0x0c,0x0b,0x0a,0x0e,0x09,0x06,0x03,0x00,0x08,0x05,0x02,0x0f,0x07,0x04,0x01
};
unsigned char i,j,Input,point;
unsigned char showbuffer[4];
void Init_PORT() {
CONT_dir|=0x0f;
SHOW_dir=0xff;
DDRA=0x0f;
PUCR|=0x01;
LED_dir=0xff;
LED_data=0x7f;
}
void Init_PIT(void) {
PITCFLMT_PITE=0;
PITCE_PCE0=1;
PITMUX_PMUX0=0;
PITMTLD0=200-1 ;
PITLD0=5000-1;
PITINTE_PINTE0=1;
PITCFLMT_PITE=1;
}
void interrupt 66 PIT0(void) {
PITTF_PTF0=1; i++;
if(i== time){
LED_data>>=1;LED_data|=0x80;
if(LED_data== 0xff)LED_data=0x7f;
i=0;
}
if(i==10)i=0;
}
unsigned char time,i ,Keyvalue1 ;
unsigned char KeyScan()
{
unsigned char i,Output,Keynumber;
Keyvalue1=0x01;
KEY_data=0xf0;
if((KEY_data>>4)!=0x0f)
{
Output=0x01;
for(i=0;i<RowSize;i++)
{
KEY_data=~Output;
if((KEY_data>>4)!=0x0f)
{
switch((KEY_data>>4))
{
case 0x0e:Keynumber=0;break;
case 0x0d:Keynumber=1;break;
case 0x0b:Keynumber=2;break;
case 0x07:Keynumber=3;break;
}
Keynumber=Keynumber+i*ColumnSize;
j=Keynumber;
Keyvalue1= KeyDecode[Keynumber];
break;
} else Output<<=1;
}
}
return(Keyvalue1);
}
void delay(unsigned int counter){
unsigned int i,j;
for(i=0;i<counter;i++)
for(j=0;j<4000;j++);
}
void show(unsigned char*showdata,unsigned char point) {
unsigned char DisplayNumber;
unsigned char showcon[4]={
0x01,0x02,0x04,0x08
};
for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++){
CONT_data&=0xf0;
SHOW_data=DisplayDecode[*showdata++] ;
if(DisplayNumber==point)SHOW_data|=0x80;
CONT_data|=showcon[DisplayNumber];
delay(1);
}
}
void main(void) {
/* put your own code here */
i=0;
Init_PORT();
Init_PIT();
EnableInterrupts;
for( ; ; ){
time=KeyScan();
showbuffer[0]=time%10;
showbuffer[1]=time/10;
showbuffer[2]=0;
showbuffer[3]=0;
show(showbuffer,2);
}
}
/*笔芯 */