Các chương trình lập trình Keil C cơ bản
phục vụ cho thực tập vi xử lý
1. Hiệu ứng 8 Led đơn
#include <REGX51.H>
char mangTraiPhai[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char mangGiuaRa[]={0xe7,0xdb,0xbd,0x7e};
char mangSangDanRaVao[]={0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7};
char mangSangTatBonLed[]={0xee,0xcc,0x88,0x00,0x11,0x33,0x77,0xff};
char
mangNhayDuoiXuoi[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc1,0x83,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
char mangDuoiXuoi2[]={0x11,0x22,0x44,0x88};
char mangZicZac[]={0x55,0xaa,0xcc,0x33};
char mangDonQuaPhai[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
//============================
void delay(int time){
while(time );
}
//==============================================
void traiPhai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=mangTraiPhai[j];
delay(10000);
}
}
}
//============================================================
void phaiTrai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=7;j>=0;j ){
P2=mangTraiPhai[j];
delay(10000);
}
}
}
//==========================================================
void ngoaiVao(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=3;j>=0;j ){
P2=mangGiuaRa[j];
delay(10000);
}
}
}
//==========================================================
void giuaRa(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<4;j++){
P2=mangGiuaRa[j];
delay(10000);
}
}
}
//==========================================================
void sangDonQuaPhai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<9;j++){
P2=mangDonQuaPhai[j];
delay(10000);
}
for(j=8;j>=0;j ){
P2=mangDonQuaPhai[j];
delay(10000);
}
}
}
//==========================================================
void sangDanRaVao(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=mangSangDanRaVao[j];
delay(10000);
}
}
}
//==========================================================
void sangBonLed(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=mangSangTatBonLed[j];
delay(10000);
}
}
}
//==========================================================
void tatBonLed(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=7;j>=0;j ){
P2=mangSangTatBonLed[j];
delay(10000);
}
}
}
//==========================================================
void nhayLed(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
P2=0x00; delay(10000);
P2=0xff; delay(10000);
}
}
//==========================================================
void nhayDuoiXuoi(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<13;j++){
P2=mangNhayDuoiXuoi[j];
delay(10000);
}
}
}
//=========================================================
void nhayDuoiNguoc(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=12;j>=0;j ){
P2=mangNhayDuoiXuoi[j];
delay(10000);
}
}
}
//==========================================================
void nhayZicZac(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
P2=0x55;
delay(20000);
P2=0xaa;
delay(20000);
}
}
//==========================================================
void nhayZicZac2(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
P2=0x33;
delay(20000);
P2=0xcc;
delay(20000);
}
}
//==========================================================
void nhayDuoiXuoi2(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<4;j++){
P2=mangDuoiXuoi2[j];
delay(15000);
}
}
}
//==========================================================
void nhayDuoiNguoc2(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=3;j>=0;j ){
P2=mangDuoiXuoi2[j];
delay(15000);
}
}
}
//=========================================================
void main(){
while(1){
nhayLed(10);delay(10000);
traiPhai(3);delay(10000);
phaiTrai(3);delay(10000);
giuaRa(3);delay(10000);
ngoaiVao(3);delay(10000);
sangDanRaVao(3);delay(10000);
sangDonQuaPhai(3);delay(10000);
sangBonLed(3);delay(10000);
tatBonLed(3);delay(10000);
nhayDuoiNguoc(3);delay(10000);
nhayDuoiXuoi(3);delay(10000);
nhayZicZac(8);delay(10000);
nhayZicZac2(6);delay(10000);
nhayDuoiXuoi2(10);delay(10000);
nhayDuoiNguoc2(10);delay(10000);
}
}
2. Nháy 1 led đơn
#include <REGX51.H>
void delay(int time)
{
while(time );
}
void main(){
while(1){
P2_0=0; //bat led
delay(1000);
P2_0=1; //tat led
delay(1000);
}
}
3. Đếm 00 đến 99
#include <REGX51.H>
#define led1 P1_0
#define led2 P1_1
#define sang 0
#define tat 1
char so[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
char i;
int dem;
unsigned char chuc; donVi;
void delay(int time)
{
while(time );
}
void main(){
led1 = led2 = tat;
while(1){
for (dem = 0; dem <100; dem++){
// tach chu so
chuc = dem/10;
donVi = dem%10;
for(i=0;i<=40;i++){ // lam cham bang cach thay doi i<=10,20, cang
tang cang cham lai
led1 = sang;
P0 = so[chuc];
delay(1000); // co the lam cham lai khi tang tre len
led1 = tat;
led2 = sang;
P0 = so[donVi];
delay(1000); // co the lam cham lai khi tang tre len
led2 = tat;
}
}
}
}
4. Đếm n Led 7 thanh
#include <REGX51.H>
char so[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
char maQuet[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x7e};
char i;
unsigned char chuSo[8];
unsigned long dem, temp;
//===============================
void delay(int time)
{
while(time );
}
//===============================
void tachChuSo(unsigned long temp, int soLed){
for(i=0;i<soLed;i++){
chuSo[i]=temp%10;
temp=temp/10;
}
}
//===============================
void quetLed(int soLed){
int i,j;
for(i=0;i<25;i++){ // toc do nhay so
for(j=0;j<soLed;j++){
P2=maQuet[j];
P0=so[chuSo[j]];
delay(1200); // toc do nhay so
P2=0xff;
}
}
}
//===============================
void main(){
while(1){
for (dem = 0; dem <=99; dem++){
// tach chu so
tachChuSo(dem,2);
quetLed(2);
}
}
}
5. Điều khiển Led 7 đoạn
#include <REGX51.H>
char so[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
char i;
void Delay(int time)
{
while(time );
}
void main(){
while(1){
for(i=0;i<10;i++){
P0 = so[i];
Delay(50000);
}
}
}
6. Đồng hồ số hiển thị giờ phút giây.
#include <REGX51.H>
#define led1 P3_0
#define led2 P3_1
#define led3 P3_2
#define led4 P3_3
#define led5 P3_4
#define led6 P3_5
#define led_giay P3_6
#define set P0_0
#define up P0_1
#define down P0_2
unsigned char M[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xff};
unsigned char hour, minute, second;
unsigned char i,kt;
bit set0=1,set1=1,up1=1,up0=1,down0=1,down1=1;
//=================================================================
==============
void delay(unsigned int t){
unsigned int i;
for(i=1;i<t;i++);
}
//=================================================================
==============
void hien_thi(char gio,char phut,char giay){
led1=1;
P2=M[gio/10];
delay(100);
led1=0;
P2=0xff;
led2=1;
P2=M[gio%10];
delay(100);
led2=0;
P2=0xff;
led3=1;
P2=M[phut/10];
delay(100);
led3=0;
P2=0xff;
led4=1;
P2=M[phut%10];
delay(100);
led4=0;
P2=0xff;
led5=1;
P2=M[giay/10];
delay(100);
led5=0;
P2=0xff;
led6=1;
P2=M[giay%10];
delay(100);
led6=0;
P2=0xff;
}
//=================================================================
=============
void ktphim(){
set0=set1; //neu nut set duoc nhan
set1=set;
if((set0==1)&&(set1==0)){
kt++;
if(kt>3) kt=0;
}
switch(kt){
case 0: break;
case 1: // chinh gio
{
up0=up1;
up1=up;
if((up0==1)&&(up1==0)){ // neu nut up
duoc bam
hour++;
if(hour>23) hour=0;
}
down0=down1;
down1=down;
if((down0==1)&&(down1==0)){ // neu
nut down duoc bam
hour ;
if(hour==-1) hour=23;
}
break;
}
case 2: // chinh phut
{
up0=up1;
up1=up;
if((up0==1)&&(up1==0)){ // neu nut up
duoc bam
minute++;
if(minute>59) minute=0;
}
down0=down1;
down1=down;
if((down0==1)&&(down1==0)){ // neu
nut down duoc bam
minute ;
if(minute==-1) minute=59;
}
break;
}
case 3: // chinh phut
{
up0=up1;
up1=up;
if((up0==1)&&(up1==0)){ // neu nut up
duoc bam
second++;
if(second>59) second=0;
}
down0=down1;
down1=down;
if((down0==1)&&(down1==0)){ // neu
nut down duoc bam
second ;
if(second==-1) second=59;
}
break;
}
}
}
//=================================================================
==========
void main(){
while(1){
second++;
led_giay =! led_giay;
if(second==59){
second=0;
minute++;
if(minute==59){
minute=0;
hour++;
if(hour==23){
hour=0;
}
}
}
for(i=0;i<100;i++)
hien_thi(hour,minute,second);
ktphim();
}
}
7. Led 7 đoạn nút bấm
#include <REGX51.H>
int dem;
char so[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
void delay(int time)
{
while(time );
}
void main(){
while(1){
if(P3_0 == 0){
delay(100000);
if(P3_0 == 0);
dem++;
if(dem>9) dem =0;
}
if(dem==0) P2=so[0];
if(dem==1) P2=so[1];
if(dem==2) P2=so[2];
if(dem==3) P2=so[3];
if(dem==4) P2=so[4];
if(dem==5) P2=so[5];
if(dem==6) P2=so[6];
if(dem==7) P2=so[7];
if(dem==8) P2=so[8];
if(dem==8) P2=so[9];
}
}
8. Led trái tim
#include <REGX51.H>
char hieuUngSangNguoc[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
char mangTraiPhai[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char mangGiuaRa[]={0xe7,0xdb,0xbd,0x7e};
char mangSangDanRaVao[]={0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7};
char mangSangTatBonLed[]={0xee,0xcc,0x88,0x00,0x11,0x33,0x77,0xff};
char
mangNhayDuoiXuoi[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc1,0x83,0x07,0x0f,0x1f,0x3f,0x7f,0xff
};
char mangDuoiXuoi2[]={0x11,0x22,0x44,0x88};
char mangZicZac[]={0x55,0xaa,0xcc,0x33};
char mangDonQuaPhai[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
//============================
void delay(int time){
while(time );
}
void hinhTraiTim(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
P3_7=P0_0=0; delay(10000);
P3_6=P0_1=0; delay(10000);
P3_5=P0_2=0; delay(10000);
P3_4=P0_3=0; delay(10000);
P3_3=P0_4=0; delay(10000);
P3_2=P0_5=0; delay(10000);
P3_1=P0_6=0; delay(10000);
P3_0=P0_7=0; delay(10000);
P2_7=P1_0=0; delay(10000);
P2_6=P1_1=0; delay(10000);
P2_5=P1_2=0; delay(10000);
P2_4=P1_3=0; delay(10000);
P2_3=P1_4=0; delay(10000);
P2_2=P1_5=0; delay(10000);
P2_1=P1_6=0; delay(10000);
P2_0=P1_7=0; delay(10000);
P3_7=P0_0=1; delay(10000);
P3_6=P0_1=1; delay(10000);
P3_5=P0_2=1; delay(10000);
P3_4=P0_3=1; delay(10000);
P3_3=P0_4=1; delay(10000);
P3_2=P0_5=1; delay(10000);
P3_1=P0_6=1; delay(10000);
P3_0=P0_7=1; delay(10000);
P2_7=P1_0=1; delay(10000);
P2_6=P1_1=1; delay(10000);
P2_5=P1_2=1; delay(10000);
P2_4=P1_3=1; delay(10000);
P2_3=P1_4=1; delay(10000);
P2_2=P1_5=1; delay(10000);
P2_1=P1_6=1; delay(10000);
P2_0=P1_7=1; delay(10000);
P2_0=P1_7=0; delay(10000);
P2_1=P1_6=0; delay(10000);
P2_2=P1_5=0; delay(10000);
P2_3=P1_4=0; delay(10000);
P2_4=P1_3=0; delay(10000);
P2_5=P1_2=0; delay(10000);
P2_6=P1_1=0; delay(10000);
P2_7=P1_0=0; delay(10000);
P3_0=P0_7=0; delay(10000);
P3_1=P0_6=0; delay(10000);
P3_2=P0_5=0; delay(10000);
P3_3=P0_4=0; delay(10000);
P3_4=P0_3=0; delay(10000);
P3_5=P0_2=0; delay(10000);
P3_6=P0_1=0; delay(10000);
P3_7=P0_0=0; delay(10000);
P2_0=P1_7=1; delay(10000);
P2_1=P1_6=1; delay(10000);
P2_2=P1_5=1; delay(10000);
P2_3=P1_4=1; delay(10000);
P2_4=P1_3=1; delay(10000);
P2_5=P1_2=1; delay(10000);
P2_6=P1_1=1; delay(10000);
P2_7=P1_0=1; delay(10000);
P3_0=P0_7=1; delay(10000);
P3_1=P0_6=1; delay(10000);
P3_2=P0_5=1; delay(10000);
P3_3=P0_4=1; delay(10000);
P3_4=P0_3=1; delay(10000);
P3_5=P0_2=1; delay(10000);
P3_6=P0_1=1; delay(10000);
P3_7=P0_0=1; delay(10000);
}
}
//==============================================
void traiPhai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=P0=P1=P3=mangTraiPhai[j];
delay(10000);
}
}
}
//=================================================
void kimDongHo(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j,k,l,m;
for(j=0;j<9;j++){
P0=mangDonQuaPhai[j];
delay(10000);
}
for(k=0;k<9;k++){
P1=mangDonQuaPhai[k];
delay(10000);
}
for(l=0;l<9;l++){
P2=mangDonQuaPhai[l];
delay(10000);
}
for(m=0;m<9;m++){
P3=mangDonQuaPhai[m];
delay(10000);
}
for(m=8;m>=0;m ){
P3=mangDonQuaPhai[m];
delay(10000);
}
for(l=8;l>=0;l ){
P2=mangDonQuaPhai[l];
delay(10000);
}
for(k=8;k>=0;k ){
P1=mangDonQuaPhai[k];
delay(10000);
}
for(j=8;j>=0;j ){
P0=mangDonQuaPhai[j];
delay(10000);
}
}
}
//============================================================
void phaiTrai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=7;j>=0;j ){
P2=P0=P1=P3=mangTraiPhai[j];
delay(10000);
}
}
}
//============================================================
void ngoaiVao(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=3;j>=0;j ){
P2=P0=P1=P3=mangGiuaRa[j];
delay(10000);
}
}
}
//============================================================
void giuaRa(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<4;j++){
P2=P0=P1=P3=mangGiuaRa[j];
delay(10000);
}
}
}
//============================================================
void sangDonQuaPhai(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<9;j++){
P2=P0=P1=P3=mangDonQuaPhai[j];
delay(10000);
}
for(j=8;j>=0;j ){
P2=P0=P1=P3=mangDonQuaPhai[j];
delay(10000);
}
}
}
//=============================================================
void sangDanRaVao(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=P0=P1=P3=mangSangDanRaVao[j];
delay(10000);
}
}
}
//=============================================================
void sangBonLed(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=0;j<8;j++){
P2=P0=P1=P3=mangSangTatBonLed[j];
delay(10000);
}
}
}
//=============================================================
void tatBonLed(unsigned char soLan){
unsigned char i;
for(i=0;i<soLan;i++){
int j;
for(j=7;j>=0;j ){
P2=P0=P1=P3=mangSangTatBonLed[j];