昨天把所有单片机组要考试的内容看完后独立的写出了led和独立key,现在进行下一个模块的代码编写,编写数码管的模块
首先我简单说明下单片机组考试的算是范围吧:
- LED模块
- 数码管模块
- 独立按键和矩阵按键(少考)
- 温度芯片
- 时钟芯片
- 蜂鸣器和继电器
- iic通信(AD和EEPROM)
上篇简单熟悉下CT107D的开发平台的流程这次相对来说就比较好操作,话不多说了直接上视频给的练习吧
8位数码管点亮显示01234567
#include <stc15f2k60s2.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned int ucharseg[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e, 0xff}; ucharnum=8; voidallinit(); voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba); voidDelay1ms(); voidDelayms(uintms); voidmain() { allinit(); while(1) { display(num,num+1,num+2,num+3,num+4,num+5,num+6,num+7); } } voidallinit() { P2=0xa0;P0=0x00; P2=0x80;P0=0xff; P2=0xe0;P0=0xff; P2=0xc0;P0=0xff; } voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba) { P2=0xe0;//段选P0=seg[yi]; P2=0xc0;//位选P0=0x01; Delay1ms(); P2=0xe0;//段选P0=seg[er]; P2=0xc0;//位选P0=0x02; Delay1ms(); P2=0xe0;//段选P0=seg[san]; P2=0xc0;//位选P0=0x04; Delay1ms(); P2=0xe0;//段选P0=seg[si]; P2=0xc0;//位选P0=0x08; Delay1ms(); P2=0xe0;//段选P0=seg[wu]; P2=0xc0;//位选P0=0x10; Delay1ms(); P2=0xe0;//段选P0=seg[liu]; P2=0xc0;//位选P0=0x20; Delay1ms(); P2=0xe0;//段选P0=seg[qi]; P2=0xc0;//位选P0=0x40; Delay1ms(); P2=0xe0;//段选P0=seg[ba]; P2=0xc0;//位选P0=0x80; Delay1ms(); } voidDelay1ms() //@11.0592MHz{ unsignedchari, j; _nop_(); _nop_(); _nop_(); i=11; j=190; do { while (--j); } while (--i); } voidDelayms(uintms) //@11.0592MHz{ unsignedchari, j,k; for(k=ms;k>0;k--) { _nop_(); _nop_(); _nop_(); i=11; j=190; do { while (--j); } while (--i); } }
99秒倒计时当计时完成时蜂鸣器报警实验:
#include <stc15f2k60s2.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned int ucharseg[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e, 0xff}; uinttim; ucharnum=10; ucharyi=16, er=16; ucharguan=16; voidallinit(); voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba); voidDelay1ms(); voidDelayms(uintms); voidTimer0Init(); voidmain() { allinit(); Timer0Init(); while(1) { yi=num/10; er=num%10; display(yi,er,guan,guan,guan,guan,guan,guan); } } voidallinit() { P2=0xa0;P0=0x00; P2=0x80;P0=0xff; P2=0xe0;P0=0xff; P2=0xc0;P0=0xff; } voiddisplay(ucharyi,er,san,si,wu,liu,qi,ba) { P2=0xe0;//段选P0=seg[yi]; P2=0xc0;//位选P0=0x01; Delay1ms(); P2=0xe0;//段选P0=seg[er]; P2=0xc0;//位选P0=0x02; Delay1ms(); P2=0xe0;//段选P0=seg[san]; P2=0xc0;//位选P0=0x04; Delay1ms(); P2=0xe0;//段选P0=seg[si]; P2=0xc0;//位选P0=0x08; Delay1ms(); P2=0xe0;//段选P0=seg[wu]; P2=0xc0;//位选P0=0x10; Delay1ms(); P2=0xe0;//段选P0=seg[liu]; P2=0xc0;//位选P0=0x20; Delay1ms(); P2=0xe0;//段选P0=seg[qi]; P2=0xc0;//位选P0=0x40; Delay1ms(); P2=0xe0;//段选P0=seg[ba]; P2=0xc0;//位选P0=0x80; Delay1ms(); } voidDelay1ms() //@11.0592MHz{ unsignedchari, j; _nop_(); _nop_(); _nop_(); i=11; j=190; do { while (--j); } while (--i); } voidDelayms(uintms) //@11.0592MHz{ unsignedchari, j,k; for(k=ms;k>0;k--) { _nop_(); _nop_(); _nop_(); i=11; j=190; do { while (--j); } while (--i); } } voidTimer0Init(void) //1毫秒@11.0592MHz{ AUXR|=0x80; //定时器时钟1T模式TMOD&=0xF0; //设置定时器模式TL0=0xCD; //设置定时初值TH0=0xD4; //设置定时初值TF0=0; //清除TF0标志TR0=1; //定时器0开始计时EA=1;//总中断开关ET0=1;//定时器0中断开始} voidtimer0() interrupt1{ tim++; if(tim==1000) { tim=0; num--; if(num==0) { ET0=0; P2=0x80;P0=0xfe; } } }