51单片机C语言led流水灯及数码管实现秒表
生活随笔
收集整理的這篇文章主要介紹了
51单片机C语言led流水灯及数码管实现秒表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
51單片機C語言練習題
單片機型號
普中科技的
led練習題
led小燈閃爍
#include<reg52.h> sbit LED = P0^0; void main() {unsigned int i=0;while(1){LED = 1;for(i=0;i<60000;i++);LED = 0;for(i=0;i<60000;i++);} }led流水燈
#include<reg52.h>void main() {unsigned char LED = 0x01;unsigned int i=0;while(1){P0 = LED;LED = LED << 1;//從左向右依次點亮LEDif(LED == 0) //點亮第八盞后,點亮第一盞{LED = 0x01;}for(i=0;i<40000;i++);//延遲} }每隔一秒點亮一次 led,led閃爍,定時器實現
- 配置定時器工作模式
- 定時器賦初值
- 啟動定時器
- 判斷定時器是否溢出
數碼管練習題
靜態數碼管依次顯示0-F,每隔一秒更換一次
#include<reg52.h> unsigned char code segCodeTable[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void main() {unsigned char cnt = 0;unsigned int i=0;TMOD = 0x01;TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xD8;TL0 = 0xF0;cnt++;if(cnt == 100){cnt = 0;P0 = segCodeTable[i];i++;}if(i == 16){i = 0;}}}}數碼管實現秒表
#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區,初始時刻為全零 unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f }; void main() { unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;sec++;//每隔一秒刷新一次數碼管顯示緩沖區LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}//每隔1ms輸出一次段碼與位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}}}中斷方式實現數碼管秒表
#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區,初始時刻為全零 unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f }; unsigned char i = 0; unsigned char flag1s = 0;unsigned int cnt = 0; void main() { unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA = 1;ET0 = 1;while(1){if(flag1s == 1){sec++;flag1s = 0;//每隔一秒刷新一次數碼管顯示緩沖區LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}}}void InterruptTime0() interrupt 1 {TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔1ms輸出一次段碼與位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;} }數碼管高位為零不顯示
#include<reg52.h> //共陰極數碼管 unsigned char code segCodeTable[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned char code posCodeTable[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選控制 查表的方法控制 //數碼管顯示緩沖區 unsigned char LEDBuffer[8] = {0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; unsigned int cnt = 0; unsigned char i = 0; unsigned char flag1s = 0; unsigned char temp = 0x7f; void main() {unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA =1;ET0 =1;while(1){if(flag1s == 1){flag1s = 0;//刷新數碼管顯示緩沖區sec++;if(sec>=0&&sec<10){LEDBuffer[0] = segCodeTable[sec%10];}else if(sec>=10&&sec<100) //sec小于10,不更新數碼管高位顯示緩沖區{LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];}else if(sec>=100&&sec<1000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];}else if(sec>=1000&&sec<10000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];}else if(sec>=10000&&sec<100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];}else if(sec>=100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];} }} }void InterruptTimer0() interrupt 1 {TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔一ms輸出一次段碼和位碼P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}總結
以上是生活随笔為你收集整理的51单片机C语言led流水灯及数码管实现秒表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构的介绍
- 下一篇: 数据结构-顺序表(C语言实现)